From 416ed00824866f8fdc9449f396ca956294e4f915 Mon Sep 17 00:00:00 2001 From: Aaron DeRuvo Date: Tue, 1 Oct 2024 14:57:39 +0200 Subject: [PATCH 01/54] remove @celo/rpc-wallet (#342) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ### Description As described[ in this form post](https://forum.celo.org/t/deprecation-of-celo-wallet-rpc/8452) the @celo/wallet-rpc package is being removed. `personal_` namespace is deprecated in geth. and already not supported in testing environments like anvil. ### Other changes nope ### Tested n/a ### Related issues - Fixes #257 - fixes https://github.com/celo-org/celo-blockchain-planning/issues/431 ### Backwards compatibility nope ### Documentation docs updated --- ## PR-Codex overview This PR focuses on the deletion of various files and directories related to the `wallet-rpc` module in the SDK, indicating a significant removal of components from the project. ### Detailed summary - Deleted the entire `docs/sdk/wallet-rpc` directory, including `README.md` and multiple module documentation files. - Removed the `wallet-rpc` directory from `packages/sdk/wallets`, including its `README.md`, configuration files, and source files. - Eliminated test utility files related to `ganache` in `src/test-utils`. > ✨ Ask PR-Codex anything about this PR by commenting with `/codex {your question}` --- README.md | 1 - docs/sdk/wallet-rpc/README.md | 13 - .../classes/rpc_signer.RpcSigner.md | 268 ----------- .../classes/rpc_wallet.RpcWallet.md | 448 ------------------ .../enums/rpc_wallet.RpcWalletErrors.md | 32 -- docs/sdk/wallet-rpc/modules/index.md | 29 -- docs/sdk/wallet-rpc/modules/rpc_signer.md | 9 - docs/sdk/wallet-rpc/modules/rpc_wallet.md | 13 - .../modules/test_utils_ganache_setup.md | 23 - .../modules/test_utils_ganache_teardown.md | 23 - packages/sdk/wallets/wallet-rpc/.eslintrc.js | 3 - packages/sdk/wallets/wallet-rpc/.gitignore | 1 - packages/sdk/wallets/wallet-rpc/.npmignore | 24 - packages/sdk/wallets/wallet-rpc/CHANGELOG.md | 197 -------- packages/sdk/wallets/wallet-rpc/README.md | 23 - .../wallets/wallet-rpc/eslint.tsconfig.json | 4 - .../sdk/wallets/wallet-rpc/jest.config.js | 7 - packages/sdk/wallets/wallet-rpc/package.json | 45 -- packages/sdk/wallets/wallet-rpc/src/index.ts | 2 - .../sdk/wallets/wallet-rpc/src/rpc-signer.ts | 178 ------- .../wallets/wallet-rpc/src/rpc-wallet.test.ts | 256 ---------- .../sdk/wallets/wallet-rpc/src/rpc-wallet.ts | 72 --- .../src/test-utils/ganache.setup.ts | 9 - .../src/test-utils/ganache.teardown.ts | 2 - packages/sdk/wallets/wallet-rpc/tsconfig.json | 9 - packages/sdk/wallets/wallet-rpc/typedoc.json | 19 - 26 files changed, 1710 deletions(-) delete mode 100644 docs/sdk/wallet-rpc/README.md delete mode 100644 docs/sdk/wallet-rpc/classes/rpc_signer.RpcSigner.md delete mode 100644 docs/sdk/wallet-rpc/classes/rpc_wallet.RpcWallet.md delete mode 100644 docs/sdk/wallet-rpc/enums/rpc_wallet.RpcWalletErrors.md delete mode 100644 docs/sdk/wallet-rpc/modules/index.md delete mode 100644 docs/sdk/wallet-rpc/modules/rpc_signer.md delete mode 100644 docs/sdk/wallet-rpc/modules/rpc_wallet.md delete mode 100644 docs/sdk/wallet-rpc/modules/test_utils_ganache_setup.md delete mode 100644 docs/sdk/wallet-rpc/modules/test_utils_ganache_teardown.md delete mode 100644 packages/sdk/wallets/wallet-rpc/.eslintrc.js delete mode 100644 packages/sdk/wallets/wallet-rpc/.gitignore delete mode 100644 packages/sdk/wallets/wallet-rpc/.npmignore delete mode 100644 packages/sdk/wallets/wallet-rpc/CHANGELOG.md delete mode 100644 packages/sdk/wallets/wallet-rpc/README.md delete mode 100644 packages/sdk/wallets/wallet-rpc/eslint.tsconfig.json delete mode 100644 packages/sdk/wallets/wallet-rpc/jest.config.js delete mode 100644 packages/sdk/wallets/wallet-rpc/package.json delete mode 100644 packages/sdk/wallets/wallet-rpc/src/index.ts delete mode 100644 packages/sdk/wallets/wallet-rpc/src/rpc-signer.ts delete mode 100644 packages/sdk/wallets/wallet-rpc/src/rpc-wallet.test.ts delete mode 100644 packages/sdk/wallets/wallet-rpc/src/rpc-wallet.ts delete mode 100644 packages/sdk/wallets/wallet-rpc/src/test-utils/ganache.setup.ts delete mode 100644 packages/sdk/wallets/wallet-rpc/src/test-utils/ganache.teardown.ts delete mode 100644 packages/sdk/wallets/wallet-rpc/tsconfig.json delete mode 100644 packages/sdk/wallets/wallet-rpc/typedoc.json diff --git a/README.md b/README.md index 01b7b7934..3ebfc8cdc 100644 --- a/README.md +++ b/README.md @@ -47,7 +47,6 @@ This repository contains source code for: - [`@celo/wallet-ledger`](https://www.npmjs.com/package/@celo/wallet-ledger) - [`@celo/wallet-local`](https://www.npmjs.com/package/@celo/wallet-local) - [`@celo/wallet-remote`](https://www.npmjs.com/package/@celo/wallet-remote) - - [`@celo/wallet-rpc`](https://www.npmjs.com/package/@celo/wallet-rpc) ## Contributing diff --git a/docs/sdk/wallet-rpc/README.md b/docs/sdk/wallet-rpc/README.md deleted file mode 100644 index 4277c1cbd..000000000 --- a/docs/sdk/wallet-rpc/README.md +++ /dev/null @@ -1,13 +0,0 @@ -@celo/wallet-rpc - -# @celo/wallet-rpc - -## Table of contents - -### Modules - -- [index](modules/index.md) -- [rpc-signer](modules/rpc_signer.md) -- [rpc-wallet](modules/rpc_wallet.md) -- [test-utils/ganache.setup](modules/test_utils_ganache_setup.md) -- [test-utils/ganache.teardown](modules/test_utils_ganache_teardown.md) diff --git a/docs/sdk/wallet-rpc/classes/rpc_signer.RpcSigner.md b/docs/sdk/wallet-rpc/classes/rpc_signer.RpcSigner.md deleted file mode 100644 index 8affc0b25..000000000 --- a/docs/sdk/wallet-rpc/classes/rpc_signer.RpcSigner.md +++ /dev/null @@ -1,268 +0,0 @@ -[@celo/wallet-rpc](../README.md) / [rpc-signer](../modules/rpc_signer.md) / RpcSigner - -# Class: RpcSigner - -[rpc-signer](../modules/rpc_signer.md).RpcSigner - -Implements the signer interface on top of the JSON-RPC interface. - -**`Deprecated`** - -https://forum.celo.org/t/deprecation-of-celo-wallet-rpc/8452 - -## Implements - -- `Signer` - -## Table of contents - -### Constructors - -- [constructor](rpc_signer.RpcSigner.md#constructor) - -### Methods - -- [computeSharedSecret](rpc_signer.RpcSigner.md#computesharedsecret) -- [decrypt](rpc_signer.RpcSigner.md#decrypt) -- [getNativeKey](rpc_signer.RpcSigner.md#getnativekey) -- [init](rpc_signer.RpcSigner.md#init) -- [isUnlocked](rpc_signer.RpcSigner.md#isunlocked) -- [signPersonalMessage](rpc_signer.RpcSigner.md#signpersonalmessage) -- [signRawTransaction](rpc_signer.RpcSigner.md#signrawtransaction) -- [signTransaction](rpc_signer.RpcSigner.md#signtransaction) -- [signTypedData](rpc_signer.RpcSigner.md#signtypeddata) -- [unlock](rpc_signer.RpcSigner.md#unlock) - -## Constructors - -### constructor - -• **new RpcSigner**(`rpc`, `account`, `unlockBufferSeconds?`, `unlockTime?`, `unlockDuration?`): [`RpcSigner`](rpc_signer.RpcSigner.md) - -Construct a new instance of the RPC signer - -#### Parameters - -| Name | Type | Default value | Description | -| :------ | :------ | :------ | :------ | -| `rpc` | `RpcCaller` | `undefined` | RPC caller instance | -| `account` | `string` | `undefined` | Account address derived from the private key to be called in init | -| `unlockBufferSeconds` | `number` | `5` | Number of seconds to shrink the unlocked duration by to account for latency and timing inconsistencies on the node | -| `unlockTime?` | `number` | `undefined` | Timestamp in seconds when the signer was last unlocked | -| `unlockDuration?` | `number` | `undefined` | Number of seconds that the signer was last unlocked for | - -#### Returns - -[`RpcSigner`](rpc_signer.RpcSigner.md) - -#### Defined in - -[sdk/wallets/wallet-rpc/src/rpc-signer.ts:65](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/wallets/wallet-rpc/src/rpc-signer.ts#L65) - -## Methods - -### computeSharedSecret - -▸ **computeSharedSecret**(`_publicKey`): `Promise`\<`Buffer`\> - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `_publicKey` | `string` | - -#### Returns - -`Promise`\<`Buffer`\> - -#### Implementation of - -Signer.computeSharedSecret - -#### Defined in - -[sdk/wallets/wallet-rpc/src/rpc-signer.ts:174](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/wallets/wallet-rpc/src/rpc-signer.ts#L174) - -___ - -### decrypt - -▸ **decrypt**(`ciphertext`): `Promise`\<`Buffer`\> - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `ciphertext` | `Buffer` | - -#### Returns - -`Promise`\<`Buffer`\> - -#### Implementation of - -Signer.decrypt - -#### Defined in - -[sdk/wallets/wallet-rpc/src/rpc-signer.ts:165](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/wallets/wallet-rpc/src/rpc-signer.ts#L165) - -___ - -### getNativeKey - -▸ **getNativeKey**(): `string` - -#### Returns - -`string` - -#### Implementation of - -Signer.getNativeKey - -#### Defined in - -[sdk/wallets/wallet-rpc/src/rpc-signer.ts:123](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/wallets/wallet-rpc/src/rpc-signer.ts#L123) - -___ - -### init - -▸ **init**(`privateKey`, `passphrase`): `Promise`\<`string`\> - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `privateKey` | `string` | -| `passphrase` | `string` | - -#### Returns - -`Promise`\<`string`\> - -#### Defined in - -[sdk/wallets/wallet-rpc/src/rpc-signer.ts:73](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/wallets/wallet-rpc/src/rpc-signer.ts#L73) - -___ - -### isUnlocked - -▸ **isUnlocked**(): `boolean` - -#### Returns - -`boolean` - -#### Defined in - -[sdk/wallets/wallet-rpc/src/rpc-signer.ts:147](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/wallets/wallet-rpc/src/rpc-signer.ts#L147) - -___ - -### signPersonalMessage - -▸ **signPersonalMessage**(`data`): `Promise`\<\{ `r`: `Buffer` ; `s`: `Buffer` ; `v`: `number` }\> - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `data` | `string` | - -#### Returns - -`Promise`\<\{ `r`: `Buffer` ; `s`: `Buffer` ; `v`: `number` }\> - -#### Implementation of - -Signer.signPersonalMessage - -#### Defined in - -[sdk/wallets/wallet-rpc/src/rpc-signer.ts:115](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/wallets/wallet-rpc/src/rpc-signer.ts#L115) - -___ - -### signRawTransaction - -▸ **signRawTransaction**(`tx`): `Promise`\<`EncodedTransaction`\> - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `tx` | `CeloTx` | - -#### Returns - -`Promise`\<`EncodedTransaction`\> - -#### Defined in - -[sdk/wallets/wallet-rpc/src/rpc-signer.ts:79](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/wallets/wallet-rpc/src/rpc-signer.ts#L79) - -___ - -### signTransaction - -▸ **signTransaction**(): `Promise`\<\{ `r`: `Buffer` ; `s`: `Buffer` ; `v`: `number` }\> - -#### Returns - -`Promise`\<\{ `r`: `Buffer` ; `s`: `Buffer` ; `v`: `number` }\> - -#### Implementation of - -Signer.signTransaction - -#### Defined in - -[sdk/wallets/wallet-rpc/src/rpc-signer.ts:102](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/wallets/wallet-rpc/src/rpc-signer.ts#L102) - -___ - -### signTypedData - -▸ **signTypedData**(`typedData`): `Promise`\<\{ `r`: `Buffer` ; `s`: `Buffer` ; `v`: `number` }\> - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `typedData` | `EIP712TypedData` | - -#### Returns - -`Promise`\<\{ `r`: `Buffer` ; `s`: `Buffer` ; `v`: `number` }\> - -#### Implementation of - -Signer.signTypedData - -#### Defined in - -[sdk/wallets/wallet-rpc/src/rpc-signer.ts:106](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/wallets/wallet-rpc/src/rpc-signer.ts#L106) - -___ - -### unlock - -▸ **unlock**(`passphrase`, `duration`): `Promise`\<`boolean`\> - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `passphrase` | `string` | -| `duration` | `number` | - -#### Returns - -`Promise`\<`boolean`\> - -#### Defined in - -[sdk/wallets/wallet-rpc/src/rpc-signer.ts:125](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/wallets/wallet-rpc/src/rpc-signer.ts#L125) diff --git a/docs/sdk/wallet-rpc/classes/rpc_wallet.RpcWallet.md b/docs/sdk/wallet-rpc/classes/rpc_wallet.RpcWallet.md deleted file mode 100644 index 887d9e14c..000000000 --- a/docs/sdk/wallet-rpc/classes/rpc_wallet.RpcWallet.md +++ /dev/null @@ -1,448 +0,0 @@ -[@celo/wallet-rpc](../README.md) / [rpc-wallet](../modules/rpc_wallet.md) / RpcWallet - -# Class: RpcWallet - -[rpc-wallet](../modules/rpc_wallet.md).RpcWallet - -WARNING: This class should only be used with well-permissioned providers (ie IPC) - to avoid sensitive user 'privateKey' and 'passphrase' information being exposed - -**`Deprecated`** - -https://forum.celo.org/t/deprecation-of-celo-wallet-rpc/8452 - -## Hierarchy - -- `RemoteWallet`\<[`RpcSigner`](rpc_signer.RpcSigner.md)\> - - ↳ **`RpcWallet`** - -## Implements - -- `UnlockableWallet` - -## Table of contents - -### Constructors - -- [constructor](rpc_wallet.RpcWallet.md#constructor) - -### Properties - -- [isSetupFinished](rpc_wallet.RpcWallet.md#issetupfinished) - -### Methods - -- [addAccount](rpc_wallet.RpcWallet.md#addaccount) -- [computeSharedSecret](rpc_wallet.RpcWallet.md#computesharedsecret) -- [decrypt](rpc_wallet.RpcWallet.md#decrypt) -- [getAccounts](rpc_wallet.RpcWallet.md#getaccounts) -- [hasAccount](rpc_wallet.RpcWallet.md#hasaccount) -- [init](rpc_wallet.RpcWallet.md#init) -- [isAccountUnlocked](rpc_wallet.RpcWallet.md#isaccountunlocked) -- [loadAccountSigners](rpc_wallet.RpcWallet.md#loadaccountsigners) -- [removeAccount](rpc_wallet.RpcWallet.md#removeaccount) -- [signPersonalMessage](rpc_wallet.RpcWallet.md#signpersonalmessage) -- [signTransaction](rpc_wallet.RpcWallet.md#signtransaction) -- [signTypedData](rpc_wallet.RpcWallet.md#signtypeddata) -- [unlockAccount](rpc_wallet.RpcWallet.md#unlockaccount) - -## Constructors - -### constructor - -• **new RpcWallet**(`_provider`): [`RpcWallet`](rpc_wallet.RpcWallet.md) - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `_provider` | `Provider` | - -#### Returns - -[`RpcWallet`](rpc_wallet.RpcWallet.md) - -#### Overrides - -RemoteWallet\<RpcSigner\>.constructor - -#### Defined in - -[sdk/wallets/wallet-rpc/src/rpc-wallet.ts:22](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/wallets/wallet-rpc/src/rpc-wallet.ts#L22) - -## Properties - -### isSetupFinished - -• **isSetupFinished**: () => `boolean` - -#### Type declaration - -▸ (): `boolean` - -##### Returns - -`boolean` - -#### Inherited from - -RemoteWallet.isSetupFinished - -#### Defined in - -sdk/wallets/wallet-remote/lib/remote-wallet.d.ts:51 - -## Methods - -### addAccount - -▸ **addAccount**(`privateKey`, `passphrase`): `Promise`\<`string`\> - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `privateKey` | `string` | -| `passphrase` | `string` | - -#### Returns - -`Promise`\<`string`\> - -#### Implementation of - -UnlockableWallet.addAccount - -#### Defined in - -[sdk/wallets/wallet-rpc/src/rpc-wallet.ts:40](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/wallets/wallet-rpc/src/rpc-wallet.ts#L40) - -___ - -### computeSharedSecret - -▸ **computeSharedSecret**(`address`, `publicKey`): `Promise`\<`Buffer`\> - -Computes the shared secret (an ECDH key exchange object) between two accounts - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `address` | `string` | -| `publicKey` | `string` | - -#### Returns - -`Promise`\<`Buffer`\> - -#### Implementation of - -UnlockableWallet.computeSharedSecret - -#### Inherited from - -RemoteWallet.computeSharedSecret - -#### Defined in - -sdk/wallets/wallet-base/lib/wallet-base.d.ts:64 - -___ - -### decrypt - -▸ **decrypt**(`address`, `ciphertext`): `Promise`\<`Buffer`\> - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `address` | `string` | -| `ciphertext` | `Buffer` | - -#### Returns - -`Promise`\<`Buffer`\> - -#### Implementation of - -UnlockableWallet.decrypt - -#### Inherited from - -RemoteWallet.decrypt - -#### Defined in - -sdk/wallets/wallet-base/lib/wallet-base.d.ts:60 - -___ - -### getAccounts - -▸ **getAccounts**(): `string`[] - -Get a list of accounts in the remote wallet - -#### Returns - -`string`[] - -#### Implementation of - -UnlockableWallet.getAccounts - -#### Inherited from - -RemoteWallet.getAccounts - -#### Defined in - -sdk/wallets/wallet-remote/lib/remote-wallet.d.ts:27 - -___ - -### hasAccount - -▸ **hasAccount**(`address?`): `boolean` - -Returns true if account is in the remote wallet - -#### Parameters - -| Name | Type | Description | -| :------ | :------ | :------ | -| `address?` | `string` | Account to check | - -#### Returns - -`boolean` - -#### Implementation of - -UnlockableWallet.hasAccount - -#### Inherited from - -RemoteWallet.hasAccount - -#### Defined in - -sdk/wallets/wallet-remote/lib/remote-wallet.d.ts:32 - -___ - -### init - -▸ **init**(): `Promise`\<`void`\> - -Discovers wallet accounts and caches results in memory -Idempotent to ensure multiple calls are benign - -#### Returns - -`Promise`\<`void`\> - -#### Inherited from - -RemoteWallet.init - -#### Defined in - -sdk/wallets/wallet-remote/lib/remote-wallet.d.ts:15 - -___ - -### isAccountUnlocked - -▸ **isAccountUnlocked**(`address`): `boolean` - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `address` | `string` | - -#### Returns - -`boolean` - -#### Implementation of - -UnlockableWallet.isAccountUnlocked - -#### Defined in - -[sdk/wallets/wallet-rpc/src/rpc-wallet.ts:56](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/wallets/wallet-rpc/src/rpc-wallet.ts#L56) - -___ - -### loadAccountSigners - -▸ **loadAccountSigners**(): `Promise`\<`Map`\<`string`, [`RpcSigner`](rpc_signer.RpcSigner.md)\>\> - -#### Returns - -`Promise`\<`Map`\<`string`, [`RpcSigner`](rpc_signer.RpcSigner.md)\>\> - -#### Overrides - -RemoteWallet.loadAccountSigners - -#### Defined in - -[sdk/wallets/wallet-rpc/src/rpc-wallet.ts:27](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/wallets/wallet-rpc/src/rpc-wallet.ts#L27) - -___ - -### removeAccount - -▸ **removeAccount**(`_address`): `void` - -Removes the account with the given address. Needs to be implemented by subclass, otherwise throws error - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `_address` | `string` | - -#### Returns - -`void` - -#### Implementation of - -UnlockableWallet.removeAccount - -#### Inherited from - -RemoteWallet.removeAccount - -#### Defined in - -sdk/wallets/wallet-base/lib/wallet-base.d.ts:23 - -___ - -### signPersonalMessage - -▸ **signPersonalMessage**(`address`, `data`): `Promise`\<`string`\> - -#### Parameters - -| Name | Type | Description | -| :------ | :------ | :------ | -| `address` | `string` | Address of the account to sign with | -| `data` | `string` | Hex string message to sign | - -#### Returns - -`Promise`\<`string`\> - -Signature hex string (order: rsv) - -#### Implementation of - -UnlockableWallet.signPersonalMessage - -#### Inherited from - -RemoteWallet.signPersonalMessage - -#### Defined in - -sdk/wallets/wallet-remote/lib/remote-wallet.d.ts:43 - -___ - -### signTransaction - -▸ **signTransaction**(`txParams`): `Promise`\<`EncodedTransaction`\> - -Gets the signer based on the 'from' field in the tx body - -#### Parameters - -| Name | Type | Description | -| :------ | :------ | :------ | -| `txParams` | `CeloTx` | Transaction to sign | - -#### Returns - -`Promise`\<`EncodedTransaction`\> - -**`Dev`** - -overrides WalletBase.signTransaction - -#### Implementation of - -UnlockableWallet.signTransaction - -#### Overrides - -RemoteWallet.signTransaction - -#### Defined in - -[sdk/wallets/wallet-rpc/src/rpc-wallet.ts:66](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/wallets/wallet-rpc/src/rpc-wallet.ts#L66) - -___ - -### signTypedData - -▸ **signTypedData**(`address`, `typedData`): `Promise`\<`string`\> - -#### Parameters - -| Name | Type | Description | -| :------ | :------ | :------ | -| `address` | `string` | Address of the account to sign with | -| `typedData` | `EIP712TypedData` | the typed data object | - -#### Returns - -`Promise`\<`string`\> - -Signature hex string (order: rsv) - -#### Implementation of - -UnlockableWallet.signTypedData - -#### Inherited from - -RemoteWallet.signTypedData - -#### Defined in - -sdk/wallets/wallet-remote/lib/remote-wallet.d.ts:49 - -___ - -### unlockAccount - -▸ **unlockAccount**(`address`, `passphrase`, `duration`): `Promise`\<`boolean`\> - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `address` | `string` | -| `passphrase` | `string` | -| `duration` | `number` | - -#### Returns - -`Promise`\<`boolean`\> - -#### Implementation of - -UnlockableWallet.unlockAccount - -#### Defined in - -[sdk/wallets/wallet-rpc/src/rpc-wallet.ts:51](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/wallets/wallet-rpc/src/rpc-wallet.ts#L51) diff --git a/docs/sdk/wallet-rpc/enums/rpc_wallet.RpcWalletErrors.md b/docs/sdk/wallet-rpc/enums/rpc_wallet.RpcWalletErrors.md deleted file mode 100644 index a43e6687e..000000000 --- a/docs/sdk/wallet-rpc/enums/rpc_wallet.RpcWalletErrors.md +++ /dev/null @@ -1,32 +0,0 @@ -[@celo/wallet-rpc](../README.md) / [rpc-wallet](../modules/rpc_wallet.md) / RpcWalletErrors - -# Enumeration: RpcWalletErrors - -[rpc-wallet](../modules/rpc_wallet.md).RpcWalletErrors - -## Table of contents - -### Enumeration Members - -- [AccountAlreadyExists](rpc_wallet.RpcWalletErrors.md#accountalreadyexists) -- [FetchAccounts](rpc_wallet.RpcWalletErrors.md#fetchaccounts) - -## Enumeration Members - -### AccountAlreadyExists - -• **AccountAlreadyExists** = ``"RpcWallet: account already exists"`` - -#### Defined in - -[sdk/wallets/wallet-rpc/src/rpc-wallet.ts:10](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/wallets/wallet-rpc/src/rpc-wallet.ts#L10) - -___ - -### FetchAccounts - -• **FetchAccounts** = ``"RpcWallet: failed to fetch accounts from server"`` - -#### Defined in - -[sdk/wallets/wallet-rpc/src/rpc-wallet.ts:9](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/wallets/wallet-rpc/src/rpc-wallet.ts#L9) diff --git a/docs/sdk/wallet-rpc/modules/index.md b/docs/sdk/wallet-rpc/modules/index.md deleted file mode 100644 index c97688f59..000000000 --- a/docs/sdk/wallet-rpc/modules/index.md +++ /dev/null @@ -1,29 +0,0 @@ -[@celo/wallet-rpc](../README.md) / index - -# Module: index - -## Table of contents - -### References - -- [RpcSigner](index.md#rpcsigner) -- [RpcWallet](index.md#rpcwallet) -- [RpcWalletErrors](index.md#rpcwalleterrors) - -## References - -### RpcSigner - -Re-exports [RpcSigner](../classes/rpc_signer.RpcSigner.md) - -___ - -### RpcWallet - -Re-exports [RpcWallet](../classes/rpc_wallet.RpcWallet.md) - -___ - -### RpcWalletErrors - -Re-exports [RpcWalletErrors](../enums/rpc_wallet.RpcWalletErrors.md) diff --git a/docs/sdk/wallet-rpc/modules/rpc_signer.md b/docs/sdk/wallet-rpc/modules/rpc_signer.md deleted file mode 100644 index af5626462..000000000 --- a/docs/sdk/wallet-rpc/modules/rpc_signer.md +++ /dev/null @@ -1,9 +0,0 @@ -[@celo/wallet-rpc](../README.md) / rpc-signer - -# Module: rpc-signer - -## Table of contents - -### Classes - -- [RpcSigner](../classes/rpc_signer.RpcSigner.md) diff --git a/docs/sdk/wallet-rpc/modules/rpc_wallet.md b/docs/sdk/wallet-rpc/modules/rpc_wallet.md deleted file mode 100644 index 665f32636..000000000 --- a/docs/sdk/wallet-rpc/modules/rpc_wallet.md +++ /dev/null @@ -1,13 +0,0 @@ -[@celo/wallet-rpc](../README.md) / rpc-wallet - -# Module: rpc-wallet - -## Table of contents - -### Enumerations - -- [RpcWalletErrors](../enums/rpc_wallet.RpcWalletErrors.md) - -### Classes - -- [RpcWallet](../classes/rpc_wallet.RpcWallet.md) diff --git a/docs/sdk/wallet-rpc/modules/test_utils_ganache_setup.md b/docs/sdk/wallet-rpc/modules/test_utils_ganache_setup.md deleted file mode 100644 index ee63449fb..000000000 --- a/docs/sdk/wallet-rpc/modules/test_utils_ganache_setup.md +++ /dev/null @@ -1,23 +0,0 @@ -[@celo/wallet-rpc](../README.md) / test-utils/ganache.setup - -# Module: test-utils/ganache.setup - -## Table of contents - -### Functions - -- [default](test_utils_ganache_setup.md#default) - -## Functions - -### default - -▸ **default**(): `Promise`\<`void`\> - -#### Returns - -`Promise`\<`void`\> - -#### Defined in - -[sdk/wallets/wallet-rpc/src/test-utils/ganache.setup.ts:4](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/wallets/wallet-rpc/src/test-utils/ganache.setup.ts#L4) diff --git a/docs/sdk/wallet-rpc/modules/test_utils_ganache_teardown.md b/docs/sdk/wallet-rpc/modules/test_utils_ganache_teardown.md deleted file mode 100644 index b0fbc4919..000000000 --- a/docs/sdk/wallet-rpc/modules/test_utils_ganache_teardown.md +++ /dev/null @@ -1,23 +0,0 @@ -[@celo/wallet-rpc](../README.md) / test-utils/ganache.teardown - -# Module: test-utils/ganache.teardown - -## Table of contents - -### Functions - -- [default](test_utils_ganache_teardown.md#default) - -## Functions - -### default - -▸ **default**(): `any` - -#### Returns - -`any` - -#### Defined in - -dev-utils/lib/ganache-teardown.d.ts:1 diff --git a/packages/sdk/wallets/wallet-rpc/.eslintrc.js b/packages/sdk/wallets/wallet-rpc/.eslintrc.js deleted file mode 100644 index 8586cb7e2..000000000 --- a/packages/sdk/wallets/wallet-rpc/.eslintrc.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - extends: '../../../../.eslintrc.js', -} diff --git a/packages/sdk/wallets/wallet-rpc/.gitignore b/packages/sdk/wallets/wallet-rpc/.gitignore deleted file mode 100644 index c3af85790..000000000 --- a/packages/sdk/wallets/wallet-rpc/.gitignore +++ /dev/null @@ -1 +0,0 @@ -lib/ diff --git a/packages/sdk/wallets/wallet-rpc/.npmignore b/packages/sdk/wallets/wallet-rpc/.npmignore deleted file mode 100644 index 616d8322f..000000000 --- a/packages/sdk/wallets/wallet-rpc/.npmignore +++ /dev/null @@ -1,24 +0,0 @@ -/.devchain/ -/.devchain.tar.gz -/coverage/ -/node_modules/ -/src/ -/tmp/ -/.tmp/ - -/tsconfig.* -/jest.config.* -*.tgz - -/src - -/lib/**/*.test.* -/lib/test-utils - - -# exclude ts files and sourcemaps -*.map -*.ts - -# include the .d.ts files -!lib/**/*.d.ts \ No newline at end of file diff --git a/packages/sdk/wallets/wallet-rpc/CHANGELOG.md b/packages/sdk/wallets/wallet-rpc/CHANGELOG.md deleted file mode 100644 index cb76b2371..000000000 --- a/packages/sdk/wallets/wallet-rpc/CHANGELOG.md +++ /dev/null @@ -1,197 +0,0 @@ -# @celo/wallet-rpc - -## 6.0.1 - -### Patch Changes - -- [#313](https://github.com/celo-org/developer-tooling/pull/313) [`7715590`](https://github.com/celo-org/developer-tooling/commit/7715590b3efda1eb39a2600ffc858905265f5d12) Thanks [@aaronmgdr](https://github.com/aaronmgdr)! - chore: Deprecate @celo/wallet-rpc see https://forum.celo.org/t/deprecation-of-celo-wallet-rpc/8452 - -- Updated dependencies [[`d245703`](https://github.com/celo-org/developer-tooling/commit/d245703fa71ad24c88982fc6566e4d2865f586a4)]: - - @celo/connect@6.0.1 - - @celo/wallet-base@6.0.1 - - @celo/wallet-remote@6.0.1 - -## 6.0.1-beta.0 - -### Patch Changes - -- [#313](https://github.com/celo-org/developer-tooling/pull/313) [`7715590`](https://github.com/celo-org/developer-tooling/commit/7715590b3efda1eb39a2600ffc858905265f5d12) Thanks [@aaronmgdr](https://github.com/aaronmgdr)! - Deprecate @celo/wallet-rpc see https://forum.celo.org/t/deprecation-of-celo-wallet-rpc/8452 - -- Updated dependencies [[`d245703`](https://github.com/celo-org/developer-tooling/commit/d245703fa71ad24c88982fc6566e4d2865f586a4)]: - - @celo/connect@6.0.1-beta.0 - - @celo/wallet-base@6.0.1-beta.0 - - @celo/wallet-remote@6.0.1-beta.0 - -## 6.0.0 - -### Minor Changes - -- [#264](https://github.com/celo-org/developer-tooling/pull/264) [`59f4b42`](https://github.com/celo-org/developer-tooling/commit/59f4b42029699861e91dd2214c40173f70de279e) Thanks [@nicolasbrugneaux](https://github.com/nicolasbrugneaux)! - Add support for serializing, sending, parsing and deserializing cip66 transactions. This tx type is preffered over cip64 when paying for gas with tokens. Like eip1559 maxFeePerGass and maxPriorityFeePerGas are denominated in CELO. To create an cip66 transaction with Contractkit call the `kit.populateMaxFeeInToken` method with your transaction and then send it. - -### Patch Changes - -- [#59](https://github.com/celo-org/developer-tooling/pull/59) [`38b2631`](https://github.com/celo-org/developer-tooling/commit/38b26316d615e836e21bbfe2f44853f7e8220e03) Thanks [@nicolasbrugneaux](https://github.com/nicolasbrugneaux)! - CHANGE - Update the code to match @celo/wallet-base changes - -- Updated dependencies [[`38b2631`](https://github.com/celo-org/developer-tooling/commit/38b26316d615e836e21bbfe2f44853f7e8220e03), [`38b2631`](https://github.com/celo-org/developer-tooling/commit/38b26316d615e836e21bbfe2f44853f7e8220e03), [`59f4b42`](https://github.com/celo-org/developer-tooling/commit/59f4b42029699861e91dd2214c40173f70de279e), [`182bf73`](https://github.com/celo-org/developer-tooling/commit/182bf73209e6b7de0d9ea1fedaf91c9ec80299f5), [`38b2631`](https://github.com/celo-org/developer-tooling/commit/38b26316d615e836e21bbfe2f44853f7e8220e03), [`7b93642`](https://github.com/celo-org/developer-tooling/commit/7b93642803261b37971dd3c07f8748b6bc8f3378), [`38b2631`](https://github.com/celo-org/developer-tooling/commit/38b26316d615e836e21bbfe2f44853f7e8220e03), [`66972eb`](https://github.com/celo-org/developer-tooling/commit/66972ebf0dfabc845ae309c2f794fe015ac49a86)]: - - @celo/wallet-base@6.0.0 - - @celo/utils@7.0.0 - - @celo/connect@6.0.0 - - @celo/base@6.1.0 - - @celo/wallet-remote@6.0.0 - -## 6.0.0-beta.3 - -### Patch Changes - -- Updated dependencies []: - - @celo/wallet-base@6.0.0-beta.3 - - @celo/wallet-remote@6.0.0-beta.3 - -## 6.0.0-beta.2 - -### Minor Changes - -- [#264](https://github.com/celo-org/developer-tooling/pull/264) [`59f4b42`](https://github.com/celo-org/developer-tooling/commit/59f4b42029699861e91dd2214c40173f70de279e) Thanks [@nicolasbrugneaux](https://github.com/nicolasbrugneaux)! - Add support for serializing, sending, parsing and deserializing cip66 transactions. This tx type is preffered over cip64 when paying for gas with tokens. Like eip1559 maxFeePerGass and maxPriorityFeePerGas are denominated in CELO. To create an cip66 transaction with Contractkit call the `kit.populateMaxFeeInToken` method with your transaction and then send it. - -### Patch Changes - -- Updated dependencies [[`59f4b42`](https://github.com/celo-org/developer-tooling/commit/59f4b42029699861e91dd2214c40173f70de279e)]: - - @celo/wallet-base@6.0.0-beta.2 - - @celo/connect@6.0.0-beta.1 - - @celo/wallet-remote@6.0.0-beta.2 - -## 6.0.0-beta.1 - -### Patch Changes - -- Updated dependencies []: - - @celo/wallet-base@6.0.0-beta.1 - - @celo/wallet-remote@6.0.0-beta.1 - -## 6.0.0-beta.0 - -### Patch Changes - -- [#59](https://github.com/celo-org/developer-tooling/pull/59) [`38b2631`](https://github.com/celo-org/developer-tooling/commit/38b26316d615e836e21bbfe2f44853f7e8220e03) Thanks [@nicolasbrugneaux](https://github.com/nicolasbrugneaux)! - CHANGE - Update the code to match @celo/wallet-base changes - -- Updated dependencies [[`38b2631`](https://github.com/celo-org/developer-tooling/commit/38b26316d615e836e21bbfe2f44853f7e8220e03), [`38b2631`](https://github.com/celo-org/developer-tooling/commit/38b26316d615e836e21bbfe2f44853f7e8220e03), [`182bf73`](https://github.com/celo-org/developer-tooling/commit/182bf73209e6b7de0d9ea1fedaf91c9ec80299f5), [`38b2631`](https://github.com/celo-org/developer-tooling/commit/38b26316d615e836e21bbfe2f44853f7e8220e03), [`7b93642`](https://github.com/celo-org/developer-tooling/commit/7b93642803261b37971dd3c07f8748b6bc8f3378), [`38b2631`](https://github.com/celo-org/developer-tooling/commit/38b26316d615e836e21bbfe2f44853f7e8220e03), [`66972eb`](https://github.com/celo-org/developer-tooling/commit/66972ebf0dfabc845ae309c2f794fe015ac49a86)]: - - @celo/wallet-base@6.0.0-beta.0 - - @celo/utils@7.0.0-beta.0 - - @celo/connect@6.0.0-beta.0 - - @celo/base@6.1.0-beta.0 - - @celo/wallet-remote@6.0.0-beta.0 - -## 5.2.0 - -### Patch Changes - -- [#200](https://github.com/celo-org/developer-tooling/pull/200) [`6e3372f`](https://github.com/celo-org/developer-tooling/commit/6e3372f5ada20bb59d88e275170be4dae1e99f01) Thanks [@nicolasbrugneaux](https://github.com/nicolasbrugneaux)! - Bump web3-\* to 1.10.4 -- Some consumers may be forced to upgrade their web3 instance to the same version - -- Updated dependencies [[`6e3372f`](https://github.com/celo-org/developer-tooling/commit/6e3372f5ada20bb59d88e275170be4dae1e99f01), [`6e3372f`](https://github.com/celo-org/developer-tooling/commit/6e3372f5ada20bb59d88e275170be4dae1e99f01), [`6e3372f`](https://github.com/celo-org/developer-tooling/commit/6e3372f5ada20bb59d88e275170be4dae1e99f01), [`6e3372f`](https://github.com/celo-org/developer-tooling/commit/6e3372f5ada20bb59d88e275170be4dae1e99f01), [`6e3372f`](https://github.com/celo-org/developer-tooling/commit/6e3372f5ada20bb59d88e275170be4dae1e99f01)]: - - @celo/wallet-remote@5.2.0 - - @celo/wallet-base@5.2.0 - - @celo/connect@5.3.0 - - @celo/utils@6.0.1 - - @celo/base@6.0.1 - -## 5.2.0-beta.0 - -### Patch Changes - -- [#168](https://github.com/celo-org/developer-tooling/pull/168) [`c42682d`](https://github.com/celo-org/developer-tooling/commit/c42682d8a7e582f0adaa63c833a4c83a0a649f20) Thanks [@renovate](https://github.com/apps/renovate)! - Bump web3-\* to 1.10.4 -- Some consumers may be forced to upgrade their web3 instance to the same version - -- Updated dependencies [[`c42682d`](https://github.com/celo-org/developer-tooling/commit/c42682d8a7e582f0adaa63c833a4c83a0a649f20), [`08b0d6a`](https://github.com/celo-org/developer-tooling/commit/08b0d6a18b73b01c162f6ba4f97d73f3e3708160), [`5335af5`](https://github.com/celo-org/developer-tooling/commit/5335af5808a892c95245624e676cd1952a0cfb42), [`08b0d6a`](https://github.com/celo-org/developer-tooling/commit/08b0d6a18b73b01c162f6ba4f97d73f3e3708160), [`08b0d6a`](https://github.com/celo-org/developer-tooling/commit/08b0d6a18b73b01c162f6ba4f97d73f3e3708160)]: - - @celo/wallet-remote@5.2.0-beta.0 - - @celo/wallet-base@5.2.0-beta.0 - - @celo/connect@5.3.0-beta.0 - - @celo/utils@6.0.1-beta.0 - - @celo/base@6.0.1-beta.0 - -## 5.1.3 - -### Patch Changes - -- Updated dependencies [[`28cd8f8`](https://github.com/celo-org/developer-tooling/commit/28cd8f8c8dd62ecafa01ef7a7fb89117e6db9b56)]: - - @celo/connect@5.2.0 - - @celo/wallet-base@5.1.3 - - @celo/wallet-remote@5.1.3 - -## 5.1.3-beta.0 - -### Patch Changes - -- Updated dependencies [[`28cd8f8`](https://github.com/celo-org/developer-tooling/commit/28cd8f8c8dd62ecafa01ef7a7fb89117e6db9b56)]: - - @celo/connect@5.2.0-beta.0 - - @celo/wallet-base@5.1.3-beta.0 - - @celo/wallet-remote@5.1.3-beta.0 - -## 5.1.2 - -### Patch Changes - -- Updated dependencies [[`6b2e34c`](https://github.com/celo-org/developer-tooling/commit/6b2e34c973290da221aaabdc2bf4c6654ef9f99c)]: - - @celo/utils@6.0.0 - - @celo/wallet-base@5.1.2 - - @celo/wallet-remote@5.1.2 - - @celo/connect@5.1.2 - -## 5.1.2-beta.0 - -### Patch Changes - -- Updated dependencies [[`6b2e34c`](https://github.com/celo-org/developer-tooling/commit/6b2e34c973290da221aaabdc2bf4c6654ef9f99c)]: - - @celo/utils@6.0.0-beta.0 - - @celo/connect@5.1.2-beta.0 - - @celo/wallet-base@5.1.2-beta.0 - - @celo/wallet-remote@5.1.2-beta.0 - -## 5.1.1 - -### Patch Changes - -- Updated dependencies [679ef0c60] -- Updated dependencies [97d5ccf43] - - @celo/connect@5.1.1 - - @celo/base@6.0.0 - - @celo/utils@5.0.6 - - @celo/wallet-base@5.1.1 - - @celo/wallet-remote@5.1.1 - -## 5.1.1-beta.0 - -### Patch Changes - -- Updated dependencies [97d5ccf43] - - @celo/base@6.0.0-beta.0 - - @celo/connect@5.1.1-beta.0 - - @celo/utils@5.0.6-beta.0 - - @celo/wallet-base@5.1.1-beta.0 - - @celo/wallet-remote@5.1.1-beta.0 - -## 5.1.0 - -### Patch Changes - -- 53bbd4958: Note celo sdk packages will no longer be fix bumped (ie will not share the same version always) and will now use ^range when depending on each other -- Updated dependencies [d48c68afc] -- Updated dependencies [53bbd4958] -- Updated dependencies [53bbd4958] - - @celo/connect@5.1.0 - - @celo/wallet-remote@5.1.0 - - @celo/wallet-base@5.1.0 - - @celo/utils@5.0.5 - - @celo/base@5.0.5 - -## 5.1.0-beta.0 - -### Patch Changes - -- 53bbd4958: Note celo sdk packages will no longer be fix bumped (ie will not share the same version always) and will now use ^range when depending on each other -- Updated dependencies [d48c68afc] -- Updated dependencies [53bbd4958] -- Updated dependencies [53bbd4958] - - @celo/connect@5.1.0-beta.0 - - @celo/wallet-remote@5.1.0-beta.0 - - @celo/wallet-base@5.1.0-beta.0 - - @celo/utils@5.0.5-beta.0 - - @celo/base@5.0.5-beta.0 diff --git a/packages/sdk/wallets/wallet-rpc/README.md b/packages/sdk/wallets/wallet-rpc/README.md deleted file mode 100644 index e8e1b55fa..000000000 --- a/packages/sdk/wallets/wallet-rpc/README.md +++ /dev/null @@ -1,23 +0,0 @@ -# @celo/wallet-rpc - -Wallet-rpc provides utilities for performing wallet functions via RPC. - -## How we work - -We are a GitHub-first team, wihich means we have a strong preference for communicating via GitHub. -Please use GitHub to: - -🐞 [File a bug report](https://github.com/celo-org/developer-tooling/issues/new/choose) - -💬 [Ask a question](https://github.com/celo-org/developer-tooling/discussions) - -✨ [Suggest a feature](https://github.com/celo-org/developer-tooling/issues/new/choose) - -🧑‍💻 [Contribute!](/CONTRIBUTING.md) - -🚔 [Report a security vulnerability](https://github.com/celo-org/developer-tooling/issues/new/choose) - -> [!TIP] -> -> Please avoid messaging us via Slack, Telegram, or email. We are more likely to respond to you on -> GitHub than if you message us anywhere else. We actively monitor GitHub, and will get back to you shortly 🌟 \ No newline at end of file diff --git a/packages/sdk/wallets/wallet-rpc/eslint.tsconfig.json b/packages/sdk/wallets/wallet-rpc/eslint.tsconfig.json deleted file mode 100644 index a8d4317b4..000000000 --- a/packages/sdk/wallets/wallet-rpc/eslint.tsconfig.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "extends": "./tsconfig.json", - "exclude": [] -} diff --git a/packages/sdk/wallets/wallet-rpc/jest.config.js b/packages/sdk/wallets/wallet-rpc/jest.config.js deleted file mode 100644 index 16600517d..000000000 --- a/packages/sdk/wallets/wallet-rpc/jest.config.js +++ /dev/null @@ -1,7 +0,0 @@ -module.exports = { - preset: 'ts-jest', - testEnvironment: 'node', - testMatch: ['/src/**/?(*.)+(spec|test).ts?(x)'], - globalSetup: '/src/test-utils/ganache.setup.ts', - globalTeardown: '/src/test-utils/ganache.teardown.ts', -} diff --git a/packages/sdk/wallets/wallet-rpc/package.json b/packages/sdk/wallets/wallet-rpc/package.json deleted file mode 100644 index db5cc3dd2..000000000 --- a/packages/sdk/wallets/wallet-rpc/package.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "name": "@celo/wallet-rpc", - "version": "6.0.1", - "description": "Geth RPC wallet implementation", - "author": "Celo", - "license": "Apache-2.0", - "repository": "https://github.com/celo-org/developer-tooling/tree/master/packages/sdk/wallets/", - "homepage": "https://docs.celo.org", - "main": "./lib/index.js", - "types": "./lib/index.d.ts", - "keywords": [ - "celo", - "blockchain", - "sdk" - ], - "scripts": { - "build": "yarn run --top-level tsc -b .", - "clean": "yarn run --top-level tsc -b . --clean", - "docs": "yarn run --top-level typedoc", - "test": "yarn run --top-level jest --runInBand --forceExit", - "lint": "yarn run --top-level eslint -c .eslintrc.js ", - "prepublishOnly": "yarn build" - }, - "dependencies": { - "@celo/base": "^6.1.0", - "@celo/connect": "^6.0.1", - "@celo/utils": "^7.0.0", - "@celo/wallet-base": "^6.0.1", - "@celo/wallet-remote": "^6.0.1", - "@types/bn.js": "^5.1.0", - "bignumber.js": "^9.0.0", - "debug": "^4.1.1" - }, - "devDependencies": { - "@celo/contractkit": "^8.1.1", - "@celo/dev-utils": "0.0.5", - "@celo/typescript": "workspace:^", - "@types/debug": "^4.1.12", - "bn.js": "^5.1.0", - "web3": "1.10.4" - }, - "engines": { - "node": ">=8.14.2" - } -} diff --git a/packages/sdk/wallets/wallet-rpc/src/index.ts b/packages/sdk/wallets/wallet-rpc/src/index.ts deleted file mode 100644 index 015275834..000000000 --- a/packages/sdk/wallets/wallet-rpc/src/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './rpc-signer' -export * from './rpc-wallet' diff --git a/packages/sdk/wallets/wallet-rpc/src/rpc-signer.ts b/packages/sdk/wallets/wallet-rpc/src/rpc-signer.ts deleted file mode 100644 index 10fe63ef6..000000000 --- a/packages/sdk/wallets/wallet-rpc/src/rpc-signer.ts +++ /dev/null @@ -1,178 +0,0 @@ -import { ensureLeading0x, normalizeAddressWith0x, trimLeading0x } from '@celo/base/lib/address' -import { CeloTx, EncodedTransaction, Hex, RpcCaller, Signer } from '@celo/connect' -import { EIP712TypedData } from '@celo/utils/lib/sign-typed-data-utils' -import { decodeSig } from '@celo/wallet-base' -import BigNumber from 'bignumber.js' -import type BN from 'bn.js' - -const INCORRECT_PASSWORD_ERROR = 'could not decrypt key with given password' -const currentTimeInSeconds = () => Math.floor(Date.now() / 1000) - -const toRpcHex = (val: string | number | BN | undefined) => { - if (typeof val === 'number' || val instanceof BigNumber) { - return ensureLeading0x(val.toString(16)) - } else if (typeof val === 'string') { - return ensureLeading0x(val) - } else { - return '0x0' - } -} - -// TODO(yorke): move this into rpc-caller and generate typings from RPC spec -enum RpcSignerEndpoint { - ImportAccount = 'personal_importRawKey', - UnlockAccount = 'personal_unlockAccount', - SignTransaction = 'eth_signTransaction', - SignBytes = 'eth_sign', - SignTypedData = 'eth_signTypedData', - Decrypt = 'personal_decrypt', -} - -type RpcSignerEndpointInputs = { - personal_importRawKey: [string, string] - personal_unlockAccount: [string, string, number] - eth_signTransaction: [any] // RpcTx doesn't match Tx because of nonce as string instead of number - eth_sign: [string, string] - eth_signTypedData: [string, EIP712TypedData] - personal_decrypt: [string, string] -} - -type RpcSignerEndpointResult = { - personal_importRawKey: string - personal_unlockAccount: boolean - eth_signTransaction: EncodedTransaction - eth_sign: string - eth_signTypedData: string - personal_decrypt: string -} - -/** - * Implements the signer interface on top of the JSON-RPC interface. - * @deprecated https://forum.celo.org/t/deprecation-of-celo-wallet-rpc/8452 - */ -export class RpcSigner implements Signer { - /** - * Construct a new instance of the RPC signer - * - * @param rpc RPC caller instance - * @param account Account address derived from the private key to be called in init - * @param unlockBufferSeconds Number of seconds to shrink the unlocked duration by to account for - * latency and timing inconsistencies on the node - * @param unlockTime Timestamp in seconds when the signer was last unlocked - * @param unlockDuration Number of seconds that the signer was last unlocked for - * - */ - constructor( - protected rpc: RpcCaller, - protected account: string, - protected unlockBufferSeconds = 5, - protected unlockTime?: number, - protected unlockDuration?: number - ) {} - - init = (privateKey: string, passphrase: string) => - this.callAndCheckResponse(RpcSignerEndpoint.ImportAccount, [ - ensureLeading0x(privateKey), - passphrase, - ]) - - async signRawTransaction(tx: CeloTx) { - if (normalizeAddressWith0x(tx.from! as string) !== this.account) { - throw new Error(`RpcSigner cannot sign tx with 'from' ${tx.from}`) - } - // see geth SendTxArgs type - // https://github.com/celo-org/celo-blockchain/blob/fc20d6921478cda68fc88797078f20053bae8866/internal/ethapi/api.go#L1241C6-L1241C20 - const rpcTx = { - ...tx, - nonce: toRpcHex(tx.nonce), - value: toRpcHex(tx.value), - gas: toRpcHex(tx.gas), - ...(tx.gasPrice - ? { - gasPrice: toRpcHex(tx.gasPrice), - } - : { - maxPriorityFeePerGas: toRpcHex(tx.maxPriorityFeePerGas), - maxFeePerGas: toRpcHex(tx.maxFeePerGas), - }), - } - return this.callAndCheckResponse(RpcSignerEndpoint.SignTransaction, [rpcTx]) - } - - async signTransaction(): Promise<{ v: number; r: Buffer; s: Buffer }> { - throw new Error('signTransaction unimplemented; use signRawTransaction') - } - - async signTypedData(typedData: EIP712TypedData): Promise<{ v: number; r: Buffer; s: Buffer }> { - const result = await this.callAndCheckResponse(RpcSignerEndpoint.SignTypedData, [ - this.account, - typedData, - ]) - - return decodeSig(result as Hex) - } - - async signPersonalMessage(data: string): Promise<{ v: number; r: Buffer; s: Buffer }> { - const result = await this.callAndCheckResponse(RpcSignerEndpoint.SignBytes, [ - this.account, - data, - ]) - return decodeSig(result as Hex) - } - - getNativeKey = () => this.account - - async unlock(passphrase: string, duration: number): Promise { - try { - await this.callAndCheckResponse(RpcSignerEndpoint.UnlockAccount, [ - this.account, - passphrase, - duration, - ]) - } catch (error: any) { - // The callAndCheckResponse will throw an error if the passphrase is incorrect - if (error?.message?.toLowerCase()?.includes(INCORRECT_PASSWORD_ERROR)) { - return false - } - - // Re-throw otherwise - throw error - } - - this.unlockTime = currentTimeInSeconds() - this.unlockDuration = duration - return true - } - - isUnlocked() { - if (this.unlockDuration === undefined || this.unlockTime === undefined) { - return false - } - return this.unlockTime + this.unlockDuration - this.unlockBufferSeconds > currentTimeInSeconds() - } - - private async callAndCheckResponse( - endpoint: T, - params: RpcSignerEndpointInputs[T] - ): Promise { - const response = await this.rpc.call(endpoint, params) - if (response.error) { - throw new Error(`RpcSigner@${endpoint} failed with \n'${(response.error as any).message}'`) - } - return response.result! as RpcSignerEndpointResult[typeof endpoint] - } - - async decrypt(ciphertext: Buffer) { - const resp = await this.callAndCheckResponse(RpcSignerEndpoint.Decrypt, [ - this.account, - ensureLeading0x(ciphertext.toString('hex')), - ]) - - return Buffer.from(trimLeading0x(resp), 'hex') - } - - computeSharedSecret(_publicKey: string) { - throw new Error('Not implemented') - return Promise.resolve(Buffer.from([])) - } -} diff --git a/packages/sdk/wallets/wallet-rpc/src/rpc-wallet.test.ts b/packages/sdk/wallets/wallet-rpc/src/rpc-wallet.test.ts deleted file mode 100644 index dc1e7c051..000000000 --- a/packages/sdk/wallets/wallet-rpc/src/rpc-wallet.test.ts +++ /dev/null @@ -1,256 +0,0 @@ -import { CeloTx, Connection, Provider } from '@celo/connect' -import { testWithGanache } from '@celo/dev-utils/lib/ganache-test' -import { normalizeAddressWith0x, privateKeyToAddress } from '@celo/utils/lib/address' -import { verifySignature } from '@celo/utils/lib/signatureUtils' -import { recoverTransaction, verifyEIP712TypedDataSigner } from '@celo/wallet-base' -import net from 'net' -import Web3 from 'web3' -import { RpcWallet } from './rpc-wallet' - -export const CHAIN_ID = 44378 - -// Sample data from the official EIP-712 example: -// https://github.com/ethereum/EIPs/blob/master/assets/eip-712/Example.js -export const TYPED_DATA = { - types: { - EIP712Domain: [ - { name: 'name', type: 'string' }, - { name: 'version', type: 'string' }, - { name: 'chainId', type: 'uint256' }, - { name: 'verifyingContract', type: 'address' }, - ], - Person: [ - { name: 'name', type: 'string' }, - { name: 'wallet', type: 'address' }, - ], - Mail: [ - { name: 'from', type: 'Person' }, - { name: 'to', type: 'Person' }, - { name: 'contents', type: 'string' }, - ], - }, - primaryType: 'Mail', - domain: { - name: 'Ether Mail', - version: '1', - chainId: 1, - verifyingContract: '0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC', - }, - message: { - from: { - name: 'Cow', - wallet: '0xCD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826', - }, - to: { - name: 'Bob', - wallet: '0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB', - }, - contents: 'Hello, Bob!', - }, -} - -export const PRIVATE_KEY1 = '1234567890abcdef1234567890abcdef1234567890abcdef1234567890abbdef' -export const ACCOUNT_ADDRESS1 = normalizeAddressWith0x(privateKeyToAddress(PRIVATE_KEY1)) -export const PRIVATE_KEY2 = '0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890fdeccc' -export const ACCOUNT_ADDRESS2 = normalizeAddressWith0x(privateKeyToAddress(PRIVATE_KEY2)) - -const PASSPHRASE = 'ce10' -const DURATION = 10000 - -// ./build/bin/geth --datadir=./envs/alfajoresstaging --syncmode=lightest --rpcapi=net,eth,web3,personal --networkid=1101 -describe.skip('rpc-wallet', () => { - it('should work against local geth ipc', async () => { - const ipcUrl = '/Users/yorhodes/celo/blockchain/envs/alfajoresstaging/geth.ipc' - const ipcProvider = new Web3.providers.IpcProvider(ipcUrl, net) - const wallet = new RpcWallet(ipcProvider) - await wallet.init() - - const account = await wallet.addAccount(PRIVATE_KEY1, PASSPHRASE) - await wallet.unlockAccount(account, PASSPHRASE, DURATION) - - const tx = { - from: ACCOUNT_ADDRESS1, - to: ACCOUNT_ADDRESS2, - value: 1000, - } - - const result = await wallet.signTransaction(tx) - console.log(result) - - const connection = new Connection(new Web3(ipcUrl), wallet) - const txResult = await connection.sendSignedTransaction(result.raw) - console.log(txResult) - }) -}) - -// It uses personal_importKey RPC call which is not supported in anvil -testWithGanache('rpc-wallet', (web3) => { - const provider = web3.currentProvider - const rpcWallet = new RpcWallet(provider as Provider) - - describe('with ganache web3 provider', () => { - let ganacheAccounts: string[] - beforeAll(async () => { - await rpcWallet.init() - ganacheAccounts = await web3.eth.getAccounts() - ganacheAccounts = ganacheAccounts.map(normalizeAddressWith0x) - }) - - test('initalizes with provider accounts', async () => { - const accounts = rpcWallet.getAccounts() - expect(accounts).toEqual(ganacheAccounts) - }) - - test('fails if you add an invalid private key', async () => { - try { - await rpcWallet.addAccount('this is not a valid private key', PASSPHRASE) - throw new Error('Expected exception to be thrown') - } catch (e: any) { - expect(e.message).toBe('Expected 32 bytes of private key') - } - }) - - test('succeeds if you add a private key without 0x', async () => { - await rpcWallet.addAccount(PRIVATE_KEY1, PASSPHRASE) - expect(rpcWallet.hasAccount(ACCOUNT_ADDRESS1)).toBeTruthy() - }) - - test('fails if you add a private key twice', async () => { - try { - await rpcWallet.addAccount(PRIVATE_KEY1, PASSPHRASE) - throw new Error('Expected exception to be thrown') - } catch (e: any) { - expect(e.message).toBe(`RpcWallet: account already exists`) - } - }) - - test('succeeds if you add a private key with 0x', async () => { - await rpcWallet.addAccount(PRIVATE_KEY2, PASSPHRASE) - expect(rpcWallet.hasAccount(ACCOUNT_ADDRESS2)).toBeTruthy() - }) - - describe('with added accounts', () => { - test('all addresses can be retrieved', () => { - expect(rpcWallet.getAccounts()).toEqual( - ganacheAccounts.concat([ACCOUNT_ADDRESS1, ACCOUNT_ADDRESS2]) - ) - }) - - describe('unlocking', () => { - test('fails if you use an invalid passphrase', async () => { - try { - await rpcWallet.unlockAccount(ACCOUNT_ADDRESS1, 'wrong_passphrase', DURATION) - } catch (e: any) { - expect(e.message).toContain('could not decrypt key with given passphrase') - } - }) - - test('succeeds if you use the correct passphrase', async () => { - await rpcWallet.unlockAccount(ACCOUNT_ADDRESS1, PASSPHRASE, DURATION) - const unlocked = rpcWallet.isAccountUnlocked(ACCOUNT_ADDRESS1) - expect(unlocked).toBeTruthy() - }) - }) - - describe('signing', () => { - describe('using an unlocked address', () => { - beforeAll(async () => { - await rpcWallet.unlockAccount(ACCOUNT_ADDRESS1, PASSPHRASE, DURATION) - }) - - describe('when calling signTransaction', () => { - let celoTransaction: CeloTx - - beforeEach(() => { - celoTransaction = { - from: ACCOUNT_ADDRESS1, - to: ACCOUNT_ADDRESS2, - chainId: CHAIN_ID, - value: web3.utils.toWei('1', 'ether'), - nonce: 0, - gas: '10', - gasPrice: '99', - feeCurrency: '0x', - data: '0xabcdef', - } - }) - - test('succeeds with old school pricing', async () => { - await expect( - rpcWallet.signTransaction(celoTransaction) - ).resolves.toMatchInlineSnapshot( - `"0xf86b8081991094588e4b68193001e4d10928660ab4165b813717c08a0100000000000000000083abcdef25a073bb7eaa60c810af1fad0f68fa15d4714f9990d0202b62797f6134493ec9f6fba046c13e92017228c2c8f0fae74ddd735021817f2f9757cd66debed078daf4070e"` - ) - }) - - test('succeeds with with FeeMarketFields', async () => { - const feeMarketTransaction = { - ...celoTransaction, - gasPrice: undefined, - maxFeePerGas: '1500000000', - maxPriorityFeePerGas: '1500000000', - } - await expect( - rpcWallet.signTransaction(feeMarketTransaction) - ).resolves.toMatchInlineSnapshot( - `"0xf86a80801094588e4b68193001e4d10928660ab4165b813717c08a0100000000000000000083abcdef26a05e9c1e7690d05f3e1433c824fbd948643ff6c618e347ea8c23a6363f3b17cdffa072dc1c22d6147be7b4b7b3cf51eb73b8bedd7940d7b668dcd7ef688a2354a631"` - ) - }) - - // TODO(yorke): enable once fixed: https://github.com/celo-org/celo-monorepo/issues/4077 - test.skip('with same signer', async () => { - const signedTx = await rpcWallet.signTransaction(celoTransaction) - const [, recoveredSigner] = recoverTransaction(signedTx.raw) - expect(normalizeAddressWith0x(recoveredSigner)).toBe( - normalizeAddressWith0x(ACCOUNT_ADDRESS1) - ) - }) - - // https://github.com/ethereum/go-ethereum/blob/38aab0aa831594f31d02c9f02bfacc0bef48405d/rlp/decode.go#L664 - test.skip('signature with 0x00 prefix is canonicalized', async () => { - // This tx is carefully constructed to produce an S value with the first byte as 0x00 - const celoTransactionZeroPrefix = { - from: ACCOUNT_ADDRESS1, - to: ACCOUNT_ADDRESS2, - chainId: CHAIN_ID, - value: web3.utils.toWei('1', 'ether'), - nonce: 65, - gas: '10', - gasPrice: '99', - feeCurrency: '0x' as const, - data: '0xabcdef', - } - - const signedTx = await rpcWallet.signTransaction(celoTransactionZeroPrefix) - expect(signedTx.tx.s.startsWith('0x00')).toBeFalsy() - const [, recoveredSigner] = recoverTransaction(signedTx.raw) - expect(normalizeAddressWith0x(recoveredSigner)).toBe( - normalizeAddressWith0x(ACCOUNT_ADDRESS1) - ) - }) - }) - - // ganache - describe.skip('when calling signPersonalMessage', () => { - test('succeeds', async () => { - const hexStr: string = ACCOUNT_ADDRESS2 - const signedMessage = await rpcWallet.signPersonalMessage(ACCOUNT_ADDRESS1, hexStr) - expect(signedMessage).not.toBeUndefined() - const valid = verifySignature(hexStr, signedMessage, ACCOUNT_ADDRESS1) - expect(valid).toBeTruthy() - }) - }) - - describe.skip('when calling signTypedData', () => { - test('succeeds', async () => { - const signedMessage = await rpcWallet.signTypedData(ACCOUNT_ADDRESS1, TYPED_DATA) - expect(signedMessage).not.toBeUndefined() - const valid = verifyEIP712TypedDataSigner(TYPED_DATA, signedMessage, ACCOUNT_ADDRESS1) - expect(valid).toBeTruthy() - }) - }) - }) - }) - }) - }) -}) diff --git a/packages/sdk/wallets/wallet-rpc/src/rpc-wallet.ts b/packages/sdk/wallets/wallet-rpc/src/rpc-wallet.ts deleted file mode 100644 index 8a98b59aa..000000000 --- a/packages/sdk/wallets/wallet-rpc/src/rpc-wallet.ts +++ /dev/null @@ -1,72 +0,0 @@ -import { ensureLeading0x, normalizeAddressWith0x } from '@celo/base/lib/address' -import { CeloTx, HttpRpcCaller, Provider, RpcCaller } from '@celo/connect' -import { privateKeyToAddress } from '@celo/utils/lib/address' -import { UnlockableWallet } from '@celo/wallet-base' -import { RemoteWallet } from '@celo/wallet-remote' -import { RpcSigner } from './rpc-signer' - -export enum RpcWalletErrors { - FetchAccounts = 'RpcWallet: failed to fetch accounts from server', - AccountAlreadyExists = 'RpcWallet: account already exists', -} - -/** - * WARNING: This class should only be used with well-permissioned providers (ie IPC) - * to avoid sensitive user 'privateKey' and 'passphrase' information being exposed - * - * @deprecated https://forum.celo.org/t/deprecation-of-celo-wallet-rpc/8452 - */ -export class RpcWallet extends RemoteWallet implements UnlockableWallet { - protected readonly rpc: RpcCaller - - constructor(protected _provider: Provider) { - super() - this.rpc = new HttpRpcCaller(_provider) - } - - async loadAccountSigners(): Promise> { - const addressToSigner = new Map() - const resp = await this.rpc.call('eth_accounts', []) - if (resp.error) { - throw new Error(RpcWalletErrors.FetchAccounts) - } - const accounts: string[] = resp.result! - accounts.forEach((account) => { - addressToSigner.set(account, new RpcSigner(this.rpc, account)) - }) - return addressToSigner - } - - async addAccount(privateKey: string, passphrase: string): Promise { - const address = normalizeAddressWith0x(privateKeyToAddress(ensureLeading0x(privateKey))) - if (this.hasAccount(address)) { - throw new Error(RpcWalletErrors.AccountAlreadyExists) - } - const signer = new RpcSigner(this.rpc, address) - const resultantAddress = await signer.init(privateKey, passphrase) - this.addSigner(resultantAddress, signer) - return resultantAddress - } - - async unlockAccount(address: string, passphrase: string, duration: number) { - const signer = this.getSigner(address) - return signer.unlock(passphrase, duration) - } - - isAccountUnlocked(address: string) { - const signer = this.getSigner(address) - return signer.isUnlocked() - } - - /** - * Gets the signer based on the 'from' field in the tx body - * @param txParams Transaction to sign - * @dev overrides WalletBase.signTransaction - */ - async signTransaction(txParams: CeloTx) { - // Get the signer from the 'from' field - const fromAddress = txParams.from!.toString() - const signer = this.getSigner(fromAddress) - return signer.signRawTransaction(txParams) - } -} diff --git a/packages/sdk/wallets/wallet-rpc/src/test-utils/ganache.setup.ts b/packages/sdk/wallets/wallet-rpc/src/test-utils/ganache.setup.ts deleted file mode 100644 index cad7a5e9f..000000000 --- a/packages/sdk/wallets/wallet-rpc/src/test-utils/ganache.setup.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { emptySetup } from '@celo/dev-utils/lib/ganache-setup' -import { waitForPortOpen } from '@celo/dev-utils/lib/network' - -export default async function setup() { - console.log('\nstarting ganache...') - await emptySetup({}) - await waitForPortOpen('localhost', 8545, 60) - console.log('...ganache started') -} diff --git a/packages/sdk/wallets/wallet-rpc/src/test-utils/ganache.teardown.ts b/packages/sdk/wallets/wallet-rpc/src/test-utils/ganache.teardown.ts deleted file mode 100644 index c37e9bb00..000000000 --- a/packages/sdk/wallets/wallet-rpc/src/test-utils/ganache.teardown.ts +++ /dev/null @@ -1,2 +0,0 @@ -import teardown from '@celo/dev-utils/lib/ganache-teardown' -export default teardown diff --git a/packages/sdk/wallets/wallet-rpc/tsconfig.json b/packages/sdk/wallets/wallet-rpc/tsconfig.json deleted file mode 100644 index 5e02869e3..000000000 --- a/packages/sdk/wallets/wallet-rpc/tsconfig.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "extends": "@celo/typescript/tsconfig.library.json", - "compilerOptions": { - "rootDir": "src", - "outDir": "lib" - }, - "include": ["src", "src/test-utils"], - "references": [{ "path": "../../utils" }] -} diff --git a/packages/sdk/wallets/wallet-rpc/typedoc.json b/packages/sdk/wallets/wallet-rpc/typedoc.json deleted file mode 100644 index 421adcff9..000000000 --- a/packages/sdk/wallets/wallet-rpc/typedoc.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "exclude": [ - "**/*+(index|.test).ts" - ], - "excludePrivate": true, - "excludeProtected": true, - "hideGenerator": true, - "out": "../../../../docs/sdk/wallet-rpc", - "gitRevision": "master", - "readme": "none", - "entryPoints": [ - "./src" - ], - "githubPages": false, - "plugin": [ - "typedoc-plugin-markdown" - ], - "entryPointStrategy": "expand" -} \ No newline at end of file From 87223ba93ab79f43ae6884282d30a420eb09c23c Mon Sep 17 00:00:00 2001 From: Aaron DeRuvo Date: Tue, 1 Oct 2024 15:05:08 +0200 Subject: [PATCH 02/54] Remove support for reserve commands. (#339) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ### Description Penultimate step of sunsetting the reserve commands. https://forum.celo.org/t/sunset-of-reserve-commands/8454 ### Other changes n/a ### Tested n/a ### Related issues - Fixes https://github.com/celo-org/celo-blockchain-planning/issues/439 ### Backwards compatibility nope ### Documentation docs for commands removed --- ## PR-Codex overview This PR removes the support for `reserve:*` commands in the CLI as part of the deprecation process outlined in a forum discussion. ### Detailed summary - Deleted the following files: - `packages/cli/src/commands/reserve/status.ts` - `packages/cli/src/commands/reserve/transfergold.ts` - `packages/cli/src/commands/reserve/transfergold.test.ts` - Updated the `changeset/gold-pumas-fry.md` to reflect the major version change for `@celo/celocli` and document the removal of `reserve:*` commands. > ✨ Ask PR-Codex anything about this PR by commenting with `/codex {your question}` --- .changeset/gold-pumas-fry.md | 5 + packages/cli/src/commands/reserve/status.ts | 28 ----- .../src/commands/reserve/transfergold.test.ts | 107 ------------------ .../cli/src/commands/reserve/transfergold.ts | 62 ---------- 4 files changed, 5 insertions(+), 197 deletions(-) create mode 100644 .changeset/gold-pumas-fry.md delete mode 100644 packages/cli/src/commands/reserve/status.ts delete mode 100644 packages/cli/src/commands/reserve/transfergold.test.ts delete mode 100644 packages/cli/src/commands/reserve/transfergold.ts diff --git a/.changeset/gold-pumas-fry.md b/.changeset/gold-pumas-fry.md new file mode 100644 index 000000000..c06ee3719 --- /dev/null +++ b/.changeset/gold-pumas-fry.md @@ -0,0 +1,5 @@ +--- +'@celo/celocli': major +--- + +Remove support for reserve:\* commands. As foretold by https://forum.celo.org/t/sunset-of-reserve-commands/8454 diff --git a/packages/cli/src/commands/reserve/status.ts b/packages/cli/src/commands/reserve/status.ts deleted file mode 100644 index d29d9ecda..000000000 --- a/packages/cli/src/commands/reserve/status.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { BaseCommand } from '../../base' -import { printValueMapRecursive } from '../../utils/cli' - -/** - * @deprecated https://forum.celo.org/t/sunset-of-reserve-commands/8454 - */ -export default class ReserveStatus extends BaseCommand { - static description = 'Shows information about reserve' - - static flags = { - ...BaseCommand.flags, - } - - static examples = ['status'] - - async run() { - const kit = await this.getKit() - const reserve = await kit.contracts.getReserve() - const data = { - 'Reserve address': reserve.address, - Spenders: await reserve.getSpenders(), - 'Other reserves': await reserve.getOtherReserveAddresses(), - Frozen: await reserve.frozenReserveGoldStartBalance(), - 'Gold balance': await reserve.getReserveGoldBalance(), - } - printValueMapRecursive(data) - } -} diff --git a/packages/cli/src/commands/reserve/transfergold.test.ts b/packages/cli/src/commands/reserve/transfergold.test.ts deleted file mode 100644 index 5e3c256ba..000000000 --- a/packages/cli/src/commands/reserve/transfergold.test.ts +++ /dev/null @@ -1,107 +0,0 @@ -import { newReserve } from '@celo/abis/web3/mento/Reserve' -import { newMultiSig } from '@celo/abis/web3/MultiSig' -import { StrongAddress } from '@celo/base' -import { CeloContract, newKitFromWeb3 } from '@celo/contractkit' -import { GoldTokenWrapper } from '@celo/contractkit/lib/wrappers/GoldTokenWrapper' -import { - asCoreContractsOwner, - DEFAULT_OWNER_ADDRESS, - setBalance, - testWithAnvilL1, - withImpersonatedAccount, -} from '@celo/dev-utils/lib/anvil-test' -import BigNumber from 'bignumber.js' -import Web3 from 'web3' -import { testLocallyWithWeb3Node } from '../../test-utils/cliUtils' -import TransferGold from './transfergold' - -process.env.NO_SYNCCHECK = 'true' - -testWithAnvilL1('reserve:transfergold cmd', (web3: Web3) => { - const transferAmt = new BigNumber(100000) - const kit = newKitFromWeb3(web3) - - let accounts: StrongAddress[] = [] - let otherReserveAddress: StrongAddress - let otherSpender: StrongAddress - let goldToken: GoldTokenWrapper - - beforeEach(async () => { - accounts = (await web3.eth.getAccounts()) as StrongAddress[] - goldToken = await kit.contracts.getGoldToken() - - otherReserveAddress = accounts[9] - otherSpender = accounts[7] - const multiSigAddress = await kit.registry.addressFor('ReserveSpenderMultiSig' as CeloContract) - const reserveSpenderMultiSig = await kit.contracts.getMultiSig(multiSigAddress) - const reserve = await kit.contracts.getReserve() - - const reserveContract = newReserve(web3, reserve.address) - const reserveSpenderMultiSigContract = newMultiSig(web3, reserveSpenderMultiSig.address) - - await withImpersonatedAccount( - web3, - multiSigAddress, - async () => { - await reserveSpenderMultiSig - .replaceOwner(DEFAULT_OWNER_ADDRESS, accounts[0]) - .sendAndWaitForReceipt({ from: multiSigAddress }) - await reserveSpenderMultiSigContract.methods - .addOwner(otherSpender) - .send({ from: multiSigAddress }) - await reserveSpenderMultiSigContract.methods - .changeRequirement(2) - .send({ from: multiSigAddress }) - }, - new BigNumber(web3.utils.toWei('1', 'ether')) - ) - - await asCoreContractsOwner(web3, async (ownerAdress: StrongAddress) => { - await reserveContract.methods.addSpender(multiSigAddress).send({ from: ownerAdress }) - await reserveContract.methods - .addOtherReserveAddress(otherReserveAddress) - .send({ from: ownerAdress }) - }) - - await setBalance(web3, reserve.address, new BigNumber(web3.utils.toWei('1', 'ether'))) - }) - test('transferGold fails if spender not passed in', async () => { - await expect( - testLocallyWithWeb3Node( - TransferGold, - ['--from', accounts[0], '--value', transferAmt.toString(10), '--to', otherReserveAddress], - web3 - ) - ).rejects.toThrow("Some checks didn't pass!") - }) - test('can transferGold with multisig option', async () => { - const initialBalance = await goldToken.balanceOf(otherReserveAddress) - await testLocallyWithWeb3Node( - TransferGold, - [ - '--from', - accounts[0], - '--value', - transferAmt.toString(10), - '--to', - otherReserveAddress, - '--useMultiSig', - ], - web3 - ) - await testLocallyWithWeb3Node( - TransferGold, - [ - '--from', - otherSpender, - '--value', - transferAmt.toString(10), - '--to', - otherReserveAddress, - '--useMultiSig', - ], - web3 - ) - expect(await goldToken.balanceOf(accounts[9])).toEqual(initialBalance.plus(transferAmt)) - }) -}) diff --git a/packages/cli/src/commands/reserve/transfergold.ts b/packages/cli/src/commands/reserve/transfergold.ts deleted file mode 100644 index e5b0a8552..000000000 --- a/packages/cli/src/commands/reserve/transfergold.ts +++ /dev/null @@ -1,62 +0,0 @@ -import { Flags } from '@oclif/core' -import { BaseCommand } from '../../base' -import { newCheckBuilder } from '../../utils/checks' -import { displaySendTx } from '../../utils/cli' -import { CustomFlags } from '../../utils/command' - -/** - @deprecated https://forum.celo.org/t/sunset-of-reserve-commands/8454 -*/ -export default class TransferGold extends BaseCommand { - static description = 'Transfers reserve celo to other reserve address' - - static flags = { - ...BaseCommand.flags, - value: Flags.string({ required: true, description: 'The unit amount of CELO' }), - to: CustomFlags.address({ required: true, description: 'Receiving address' }), - from: CustomFlags.address({ required: true, description: "Spender's address" }), - useMultiSig: Flags.boolean({ - description: 'True means the request will be sent through multisig.', - }), - } - - static examples = [ - 'transfergold --value 9000 --to 0x91c987bf62D25945dB517BDAa840A6c661374402 --from 0x5409ed021d9299bf6814279a6a1411a7e866a631', - 'transfergold --value 9000 --to 0x91c987bf62D25945dB517BDAa840A6c661374402 --from 0x5409ed021d9299bf6814279a6a1411a7e866a631 --useMultiSig', - ] - - async run() { - const kit = await this.getKit() - const res = await this.parse(TransferGold) - const value = res.flags.value - const to = res.flags.to - const account = res.flags.from - const useMultiSig = res.flags.useMultiSig - kit.defaultAccount = account - const reserve = await kit.contracts.getReserve() - const spenders = useMultiSig ? await reserve.getSpenders() : [] - // assumes that the multisig is the most recent spender in the spenders array - const multiSigAddress = spenders.length > 0 ? spenders[spenders.length - 1] : '' - const reserveSpenderMultiSig = useMultiSig - ? await kit.contracts.getMultiSig(multiSigAddress) - : undefined - const spender = useMultiSig ? multiSigAddress : account - - await newCheckBuilder(this) - .addCheck(`${spender} is a reserve spender`, async () => reserve.isSpender(spender)) - .addConditionalCheck(`${account} is a multisig signatory`, useMultiSig, async () => - reserveSpenderMultiSig !== undefined - ? reserveSpenderMultiSig.isOwner(account) - : new Promise(() => false) - ) - .addCheck(`${to} is another reserve address`, async () => reserve.isOtherReserveAddress(to)) - .runChecks() - - const reserveTx = await reserve.transferGold(to, value) - const tx = - reserveSpenderMultiSig === undefined - ? reserveTx - : await reserveSpenderMultiSig.submitOrConfirmTransaction(reserve.address, reserveTx.txo) - await displaySendTx('transferGoldTx', tx) - } -} From 33ad4aaf6b9edc33d1ce19833dbea626798cfb88 Mon Sep 17 00:00:00 2001 From: Aaron DeRuvo Date: Wed, 2 Oct 2024 11:50:45 +0200 Subject: [PATCH 03/54] Create metadata claims package / remove from contractkit (#340) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ### Description @celo/contractkit has for a long time basically had within it a subpackage under /identity that really didnt have anything to do with contractkit. Removing it will make it easier to build social connect tools as they use the IdentityMetadataMapper contained in here. However this is not social connect tool so it will remain in the developer tooling repo. This is a prereq to remove contractkit as a dependency for social connect. a long term aim. ### Other changes ### Tested uses existing tests ### Related issues - Fixes https://github.com/celo-org/developer-tooling/issues/15 ### Backwards compatibility nope exports moved to a new package. file structure slightly altered. parameter for IdentityMetadataMapper changes to take an object with specific functions rather than a kit ### Documentation --- ## PR-Codex overview This PR introduces the `@celo/metadata-claims` package, extracting identity-related functionality from `@celo/contractkit`. This allows developers to use the `IdentityMetadataWrapper` independently of `ContractKit`, enhancing modularity and usability. ### Detailed summary - Created `@celo/metadata-claims` package. - Moved identity and claims-related functionality from `@celo/contractkit`. - Updated imports in CLI commands and SDK files to use the new package. - Introduced types like `AccountMetadataSignerGetters`. - Removed identity-related exports from `@celo/contractkit`. - Added tests for new functionality in the `metadata-claims` package. > The following files were skipped due to too many changes: `packages/sdk/wallets/wallet-rpc/lib/rpc-signer.js.map`, `packages/sdk/wallets/wallet-rpc/lib/rpc-signer.js`, `packages/sdk/wallets/wallet-rpc/lib/rpc-wallet.test.js.map`, `docs/sdk/metadata-claims/modules/claim.md`, `packages/sdk/wallets/wallet-rpc/lib/rpc-wallet.test.js`, `docs/sdk/metadata-claims/classes/metadata.IdentityMetadataWrapper.md` > ✨ Ask PR-Codex anything about this PR by commenting with `/codex {your question}` --- .changeset/hot-pugs-nail.md | 42 +++ .changeset/thirty-pugs-smile.md | 26 ++ .gitignore | 1 + ...entity_metadata.IdentityMetadataWrapper.md | 321 ------------------ .../enums/identity_claims_types.ClaimTypes.md | 87 ----- docs/sdk/contractkit/modules.md | 7 - docs/sdk/contractkit/modules/identity.md | 36 -- .../modules/identity_claims_account.md | 78 ----- .../modules/identity_claims_claim.md | 314 ----------------- .../modules/identity_claims_keybase.md | 125 ------- .../modules/identity_claims_types.md | 74 ---- .../modules/identity_claims_verify.md | 94 ----- .../contractkit/modules/identity_metadata.md | 47 --- docs/sdk/contractkit/modules/index.md | 7 - docs/sdk/metadata-claims/README.md | 15 + .../metadata.IdentityMetadataWrapper.md | 321 ++++++++++++++++++ .../metadata-claims/enums/types.ClaimTypes.md | 87 +++++ docs/sdk/metadata-claims/modules/account.md | 78 +++++ docs/sdk/metadata-claims/modules/claim.md | 314 +++++++++++++++++ docs/sdk/metadata-claims/modules/index.md | 50 +++ docs/sdk/metadata-claims/modules/keybase.md | 125 +++++++ docs/sdk/metadata-claims/modules/metadata.md | 47 +++ docs/sdk/metadata-claims/modules/types.md | 108 ++++++ docs/sdk/metadata-claims/modules/verify.md | 94 +++++ packages/cli/package.json | 1 + .../cli/src/commands/account/claim-account.ts | 2 +- .../cli/src/commands/account/claim-domain.ts | 2 +- .../cli/src/commands/account/claim-keybase.ts | 9 +- .../cli/src/commands/account/claim-name.ts | 2 +- .../cli/src/commands/account/claim-storage.ts | 2 +- .../cli/src/commands/account/claims.test.ts | 4 +- .../src/commands/account/create-metadata.ts | 2 +- .../cli/src/commands/account/get-metadata.ts | 2 +- .../src/commands/account/register-metadata.ts | 2 +- .../commands/account/show-claimed-accounts.ts | 13 +- .../cli/src/commands/account/show-metadata.ts | 2 +- packages/cli/src/utils/identity.ts | 31 +- packages/sdk/contractkit/package.json | 3 +- .../sdk/contractkit/src/identity/index.ts | 1 - packages/sdk/contractkit/src/index.ts | 3 +- packages/sdk/metadata-claims/.eslintrc.js | 3 + packages/sdk/metadata-claims/README.md | 1 + .../sdk/metadata-claims/eslint.tsconfig.json | 4 + packages/sdk/metadata-claims/jest.config.js | 8 + packages/sdk/metadata-claims/jestSetup.ts | 12 + packages/sdk/metadata-claims/package.json | 46 +++ .../src}/account.test.ts | 21 +- .../claims => metadata-claims/src}/account.ts | 0 .../claims => metadata-claims/src}/claim.ts | 0 .../src}/domain.test.ts | 30 +- packages/sdk/metadata-claims/src/index.ts | 2 + .../claims => metadata-claims/src}/keybase.ts | 11 +- .../src}/metadata.test.ts | 4 +- .../src}/metadata.ts | 33 +- .../claims => metadata-claims/src}/types.ts | 13 + .../claims => metadata-claims/src}/verify.ts | 38 +-- packages/sdk/metadata-claims/tsconfig.json | 9 + packages/sdk/metadata-claims/typedoc.json | 19 ++ .../sdk/wallets/wallet-rpc/lib/index.d.ts | 2 + packages/sdk/wallets/wallet-rpc/lib/index.js | 19 ++ .../sdk/wallets/wallet-rpc/lib/index.js.map | 1 + .../wallets/wallet-rpc/lib/rpc-signer.d.ts | 49 +++ .../sdk/wallets/wallet-rpc/lib/rpc-signer.js | 164 +++++++++ .../wallets/wallet-rpc/lib/rpc-signer.js.map | 1 + .../wallets/wallet-rpc/lib/rpc-wallet.d.ts | 29 ++ .../sdk/wallets/wallet-rpc/lib/rpc-wallet.js | 86 +++++ .../wallets/wallet-rpc/lib/rpc-wallet.js.map | 1 + .../wallet-rpc/lib/rpc-wallet.test.d.ts | 39 +++ .../wallets/wallet-rpc/lib/rpc-wallet.test.js | 227 +++++++++++++ .../wallet-rpc/lib/rpc-wallet.test.js.map | 1 + .../lib/test-utils/ganache.setup.d.ts | 1 + .../lib/test-utils/ganache.setup.js | 23 ++ .../lib/test-utils/ganache.setup.js.map | 1 + .../lib/test-utils/ganache.teardown.d.ts | 2 + .../lib/test-utils/ganache.teardown.js | 8 + .../lib/test-utils/ganache.teardown.js.map | 1 + yarn.lock | 33 +- 77 files changed, 2252 insertions(+), 1269 deletions(-) create mode 100644 .changeset/hot-pugs-nail.md create mode 100644 .changeset/thirty-pugs-smile.md delete mode 100644 docs/sdk/contractkit/classes/identity_metadata.IdentityMetadataWrapper.md delete mode 100644 docs/sdk/contractkit/enums/identity_claims_types.ClaimTypes.md delete mode 100644 docs/sdk/contractkit/modules/identity.md delete mode 100644 docs/sdk/contractkit/modules/identity_claims_account.md delete mode 100644 docs/sdk/contractkit/modules/identity_claims_claim.md delete mode 100644 docs/sdk/contractkit/modules/identity_claims_keybase.md delete mode 100644 docs/sdk/contractkit/modules/identity_claims_types.md delete mode 100644 docs/sdk/contractkit/modules/identity_claims_verify.md delete mode 100644 docs/sdk/contractkit/modules/identity_metadata.md create mode 100644 docs/sdk/metadata-claims/README.md create mode 100644 docs/sdk/metadata-claims/classes/metadata.IdentityMetadataWrapper.md create mode 100644 docs/sdk/metadata-claims/enums/types.ClaimTypes.md create mode 100644 docs/sdk/metadata-claims/modules/account.md create mode 100644 docs/sdk/metadata-claims/modules/claim.md create mode 100644 docs/sdk/metadata-claims/modules/index.md create mode 100644 docs/sdk/metadata-claims/modules/keybase.md create mode 100644 docs/sdk/metadata-claims/modules/metadata.md create mode 100644 docs/sdk/metadata-claims/modules/types.md create mode 100644 docs/sdk/metadata-claims/modules/verify.md delete mode 100644 packages/sdk/contractkit/src/identity/index.ts create mode 100644 packages/sdk/metadata-claims/.eslintrc.js create mode 100644 packages/sdk/metadata-claims/README.md create mode 100644 packages/sdk/metadata-claims/eslint.tsconfig.json create mode 100644 packages/sdk/metadata-claims/jest.config.js create mode 100644 packages/sdk/metadata-claims/jestSetup.ts create mode 100644 packages/sdk/metadata-claims/package.json rename packages/sdk/{contractkit/src/identity/claims => metadata-claims/src}/account.test.ts (81%) rename packages/sdk/{contractkit/src/identity/claims => metadata-claims/src}/account.ts (100%) rename packages/sdk/{contractkit/src/identity/claims => metadata-claims/src}/claim.ts (100%) rename packages/sdk/{contractkit/src/identity/claims => metadata-claims/src}/domain.test.ts (70%) create mode 100644 packages/sdk/metadata-claims/src/index.ts rename packages/sdk/{contractkit/src/identity/claims => metadata-claims/src}/keybase.ts (89%) rename packages/sdk/{contractkit/src/identity => metadata-claims/src}/metadata.test.ts (97%) rename packages/sdk/{contractkit/src/identity => metadata-claims/src}/metadata.ts (88%) rename packages/sdk/{contractkit/src/identity/claims => metadata-claims/src}/types.ts (52%) rename packages/sdk/{contractkit/src/identity/claims => metadata-claims/src}/verify.ts (73%) create mode 100644 packages/sdk/metadata-claims/tsconfig.json create mode 100644 packages/sdk/metadata-claims/typedoc.json create mode 100644 packages/sdk/wallets/wallet-rpc/lib/index.d.ts create mode 100644 packages/sdk/wallets/wallet-rpc/lib/index.js create mode 100644 packages/sdk/wallets/wallet-rpc/lib/index.js.map create mode 100644 packages/sdk/wallets/wallet-rpc/lib/rpc-signer.d.ts create mode 100644 packages/sdk/wallets/wallet-rpc/lib/rpc-signer.js create mode 100644 packages/sdk/wallets/wallet-rpc/lib/rpc-signer.js.map create mode 100644 packages/sdk/wallets/wallet-rpc/lib/rpc-wallet.d.ts create mode 100644 packages/sdk/wallets/wallet-rpc/lib/rpc-wallet.js create mode 100644 packages/sdk/wallets/wallet-rpc/lib/rpc-wallet.js.map create mode 100644 packages/sdk/wallets/wallet-rpc/lib/rpc-wallet.test.d.ts create mode 100644 packages/sdk/wallets/wallet-rpc/lib/rpc-wallet.test.js create mode 100644 packages/sdk/wallets/wallet-rpc/lib/rpc-wallet.test.js.map create mode 100644 packages/sdk/wallets/wallet-rpc/lib/test-utils/ganache.setup.d.ts create mode 100644 packages/sdk/wallets/wallet-rpc/lib/test-utils/ganache.setup.js create mode 100644 packages/sdk/wallets/wallet-rpc/lib/test-utils/ganache.setup.js.map create mode 100644 packages/sdk/wallets/wallet-rpc/lib/test-utils/ganache.teardown.d.ts create mode 100644 packages/sdk/wallets/wallet-rpc/lib/test-utils/ganache.teardown.js create mode 100644 packages/sdk/wallets/wallet-rpc/lib/test-utils/ganache.teardown.js.map diff --git a/.changeset/hot-pugs-nail.md b/.changeset/hot-pugs-nail.md new file mode 100644 index 000000000..1ac80cec4 --- /dev/null +++ b/.changeset/hot-pugs-nail.md @@ -0,0 +1,42 @@ +--- +'@celo/contractkit': major +--- + +Removes all exports under the lib/identity folder. These have been move to a new @celo/metadata-claims package and should be imported from there. + +Note that folder structure is also flattened slightly. so replace `@celo/contractkit/lib/identity/claims/` with `@celo/metadata-claims/lib/` + +example + +```diff +- import { createAccountClaim } from '@celo/contractkit/lib/identity/claims/account' ++ import { createAccountClaim } from '@celo/metadata-claims/lib/account' +``` + +```diff +- import { ContractKit, IdentityMetadataWrapper, newKitFromWeb3 } from '@celo/contractkit' +- import { ClaimTypes } from '@celo/contractkit/lib/identity' ++ import { ContractKit, newKitFromWeb3 } from '@celo/contractkit' ++ import { ClaimTypes, IdentityMetadataWrapper } from '@celo/metadata-claims' + +``` + +Note that Contractkit is Not a dependency. Instead when using `IdentityMetadataWrapper` you should make an object that satisfis the `AccountMetadataSignerGetters` type + +```typescript +import { AccountMetadataSignerGetters } from '@celo/metadata-claims/lib/types'; + +``` +using viem it would be like + +```typescript +const accountsMetaDataSignerGetters: AccountMetadataSignerGetters = { + isAccount: async (address: string) => accounts.read.isAccount([address as Address]), + getValidatorSigner: async (address: string) => + accounts.read.getValidatorSigner([address as Address]), + getVoteSigner: async (address: string) => + accounts.read.getValidatorSigner([address as Address]), + getAttestationSigner: async (address: string) => + accounts.read.getValidatorSigner([address as Address]), + } +``` diff --git a/.changeset/thirty-pugs-smile.md b/.changeset/thirty-pugs-smile.md new file mode 100644 index 000000000..5b9db6788 --- /dev/null +++ b/.changeset/thirty-pugs-smile.md @@ -0,0 +1,26 @@ +--- +'@celo/metadata-claims': major +--- + +Introducing @celo/metadata-claims These are a series of functions extracted from @celo/contractkit since they didnt strictly need depend on contractkit itsefl. Developers can now use IdentityMetadataWrapper with any js rpc library like ethers or viem or web3js without being forced to import ContractKit. + + +Instead when using `IdentityMetadataWrapper` you should make an object that satisfis the `AccountMetadataSignerGetters` type + +```typescript +import { AccountMetadataSignerGetters } from '@celo/metadata-claims/lib/types'; + +``` +using viem it would be like + +```typescript +const accountsMetaDataSignerGetters: AccountMetadataSignerGetters = { + isAccount: async (address: string) => accounts.read.isAccount([address as Address]), + getValidatorSigner: async (address: string) => + accounts.read.getValidatorSigner([address as Address]), + getVoteSigner: async (address: string) => + accounts.read.getValidatorSigner([address as Address]), + getAttestationSigner: async (address: string) => + accounts.read.getValidatorSigner([address as Address]), + } +``` \ No newline at end of file diff --git a/.gitignore b/.gitignore index 11d572ad7..2f0507725 100644 --- a/.gitignore +++ b/.gitignore @@ -91,3 +91,4 @@ package.json-e # Ignore generated credentials from google-github-actions/auth gha-creds-*.json transactions.json +packages/sdk/metadata-claims/lib diff --git a/docs/sdk/contractkit/classes/identity_metadata.IdentityMetadataWrapper.md b/docs/sdk/contractkit/classes/identity_metadata.IdentityMetadataWrapper.md deleted file mode 100644 index 03690465a..000000000 --- a/docs/sdk/contractkit/classes/identity_metadata.IdentityMetadataWrapper.md +++ /dev/null @@ -1,321 +0,0 @@ -[@celo/contractkit](../README.md) / [Exports](../modules.md) / [identity/metadata](../modules/identity_metadata.md) / IdentityMetadataWrapper - -# Class: IdentityMetadataWrapper - -[identity/metadata](../modules/identity_metadata.md).IdentityMetadataWrapper - -## Table of contents - -### Constructors - -- [constructor](identity_metadata.IdentityMetadataWrapper.md#constructor) - -### Properties - -- [data](identity_metadata.IdentityMetadataWrapper.md#data) - -### Accessors - -- [claims](identity_metadata.IdentityMetadataWrapper.md#claims) - -### Methods - -- [addClaim](identity_metadata.IdentityMetadataWrapper.md#addclaim) -- [filterClaims](identity_metadata.IdentityMetadataWrapper.md#filterclaims) -- [findClaim](identity_metadata.IdentityMetadataWrapper.md#findclaim) -- [hashOfClaims](identity_metadata.IdentityMetadataWrapper.md#hashofclaims) -- [toString](identity_metadata.IdentityMetadataWrapper.md#tostring) -- [fetchFromURL](identity_metadata.IdentityMetadataWrapper.md#fetchfromurl) -- [fromEmpty](identity_metadata.IdentityMetadataWrapper.md#fromempty) -- [fromFile](identity_metadata.IdentityMetadataWrapper.md#fromfile) -- [fromRawString](identity_metadata.IdentityMetadataWrapper.md#fromrawstring) -- [verifySigner](identity_metadata.IdentityMetadataWrapper.md#verifysigner) -- [verifySignerForAddress](identity_metadata.IdentityMetadataWrapper.md#verifysignerforaddress) - -## Constructors - -### constructor - -• **new IdentityMetadataWrapper**(`data`): [`IdentityMetadataWrapper`](identity_metadata.IdentityMetadataWrapper.md) - -#### Parameters - -| Name | Type | Default value | -| :------ | :------ | :------ | -| `data` | `Object` | `undefined` | -| `data.claims` | (\{ `address`: `string` = AddressType; `publicKey`: `undefined` \| `string` ; `timestamp`: `number` = TimestampType; `type`: [`ACCOUNT`](../enums/identity_claims_types.ClaimTypes.md#account) } \| \{ `timestamp`: `number` = TimestampType; `type`: [`KEYBASE`](../enums/identity_claims_types.ClaimTypes.md#keybase) ; `username`: `string` = t.string } \| \{ `domain`: `string` = t.string; `timestamp`: `number` = TimestampType; `type`: [`DOMAIN`](../enums/identity_claims_types.ClaimTypes.md#domain) } \| \{ `name`: `string` = t.string; `timestamp`: `number` = TimestampType; `type`: [`NAME`](../enums/identity_claims_types.ClaimTypes.md#name) } \| \{ `address`: `string` = t.string; `filteredDataPaths`: `string` = t.string; `timestamp`: `number` = TimestampType; `type`: [`STORAGE`](../enums/identity_claims_types.ClaimTypes.md#storage) })[] | `undefined` | -| `data.meta` | `Object` | `MetaType` | -| `data.meta.address` | `string` | `AddressType` | -| `data.meta.signature` | `string` | `SignatureType` | - -#### Returns - -[`IdentityMetadataWrapper`](identity_metadata.IdentityMetadataWrapper.md) - -#### Defined in - -[packages/sdk/contractkit/src/identity/metadata.ts:154](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/identity/metadata.ts#L154) - -## Properties - -### data - -• **data**: `Object` - -#### Type declaration - -| Name | Type | -| :------ | :------ | -| `claims` | (\{ `address`: `string` = AddressType; `publicKey`: `undefined` \| `string` ; `timestamp`: `number` = TimestampType; `type`: [`ACCOUNT`](../enums/identity_claims_types.ClaimTypes.md#account) } \| \{ `timestamp`: `number` = TimestampType; `type`: [`KEYBASE`](../enums/identity_claims_types.ClaimTypes.md#keybase) ; `username`: `string` = t.string } \| \{ `domain`: `string` = t.string; `timestamp`: `number` = TimestampType; `type`: [`DOMAIN`](../enums/identity_claims_types.ClaimTypes.md#domain) } \| \{ `name`: `string` = t.string; `timestamp`: `number` = TimestampType; `type`: [`NAME`](../enums/identity_claims_types.ClaimTypes.md#name) } \| \{ `address`: `string` = t.string; `filteredDataPaths`: `string` = t.string; `timestamp`: `number` = TimestampType; `type`: [`STORAGE`](../enums/identity_claims_types.ClaimTypes.md#storage) })[] | -| `meta` | \{ `address`: `string` = AddressType; `signature`: `string` = SignatureType } | -| `meta.address` | `string` | -| `meta.signature` | `string` | - -#### Defined in - -[packages/sdk/contractkit/src/identity/metadata.ts:32](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/identity/metadata.ts#L32) - -## Accessors - -### claims - -• `get` **claims**(): (\{ `address`: `string` = AddressType; `publicKey`: `undefined` \| `string` ; `timestamp`: `number` = TimestampType; `type`: [`ACCOUNT`](../enums/identity_claims_types.ClaimTypes.md#account) } \| \{ `timestamp`: `number` = TimestampType; `type`: [`KEYBASE`](../enums/identity_claims_types.ClaimTypes.md#keybase) ; `username`: `string` = t.string } \| \{ `domain`: `string` = t.string; `timestamp`: `number` = TimestampType; `type`: [`DOMAIN`](../enums/identity_claims_types.ClaimTypes.md#domain) } \| \{ `name`: `string` = t.string; `timestamp`: `number` = TimestampType; `type`: [`NAME`](../enums/identity_claims_types.ClaimTypes.md#name) } \| \{ `address`: `string` = t.string; `filteredDataPaths`: `string` = t.string; `timestamp`: `number` = TimestampType; `type`: [`STORAGE`](../enums/identity_claims_types.ClaimTypes.md#storage) })[] - -#### Returns - -(\{ `address`: `string` = AddressType; `publicKey`: `undefined` \| `string` ; `timestamp`: `number` = TimestampType; `type`: [`ACCOUNT`](../enums/identity_claims_types.ClaimTypes.md#account) } \| \{ `timestamp`: `number` = TimestampType; `type`: [`KEYBASE`](../enums/identity_claims_types.ClaimTypes.md#keybase) ; `username`: `string` = t.string } \| \{ `domain`: `string` = t.string; `timestamp`: `number` = TimestampType; `type`: [`DOMAIN`](../enums/identity_claims_types.ClaimTypes.md#domain) } \| \{ `name`: `string` = t.string; `timestamp`: `number` = TimestampType; `type`: [`NAME`](../enums/identity_claims_types.ClaimTypes.md#name) } \| \{ `address`: `string` = t.string; `filteredDataPaths`: `string` = t.string; `timestamp`: `number` = TimestampType; `type`: [`STORAGE`](../enums/identity_claims_types.ClaimTypes.md#storage) })[] - -#### Defined in - -[packages/sdk/contractkit/src/identity/metadata.ts:158](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/identity/metadata.ts#L158) - -## Methods - -### addClaim - -▸ **addClaim**(`claim`, `signer`): `Promise`\<[`Claim`](../modules/identity_claims_claim.md#claim)\> - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `claim` | [`Claim`](../modules/identity_claims_claim.md#claim) | -| `signer` | `Signer` | - -#### Returns - -`Promise`\<[`Claim`](../modules/identity_claims_claim.md#claim)\> - -#### Defined in - -[packages/sdk/contractkit/src/identity/metadata.ts:173](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/identity/metadata.ts#L173) - -___ - -### filterClaims - -▸ **filterClaims**\<`K`\>(`type`): [`ClaimPayload`](../modules/identity_claims_claim.md#claimpayload)\<`K`\>[] - -#### Type parameters - -| Name | Type | -| :------ | :------ | -| `K` | extends [`ClaimTypes`](../enums/identity_claims_types.ClaimTypes.md) | - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `type` | `K` | - -#### Returns - -[`ClaimPayload`](../modules/identity_claims_claim.md#claimpayload)\<`K`\>[] - -#### Defined in - -[packages/sdk/contractkit/src/identity/metadata.ts:213](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/identity/metadata.ts#L213) - -___ - -### findClaim - -▸ **findClaim**\<`K`\>(`type`): `undefined` \| [`ClaimPayload`](../modules/identity_claims_claim.md#claimpayload)\<`K`\> - -#### Type parameters - -| Name | Type | -| :------ | :------ | -| `K` | extends [`ClaimTypes`](../enums/identity_claims_types.ClaimTypes.md) | - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `type` | `K` | - -#### Returns - -`undefined` \| [`ClaimPayload`](../modules/identity_claims_claim.md#claimpayload)\<`K`\> - -#### Defined in - -[packages/sdk/contractkit/src/identity/metadata.ts:209](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/identity/metadata.ts#L209) - -___ - -### hashOfClaims - -▸ **hashOfClaims**(): `string` - -#### Returns - -`string` - -#### Defined in - -[packages/sdk/contractkit/src/identity/metadata.ts:162](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/identity/metadata.ts#L162) - -___ - -### toString - -▸ **toString**(): `string` - -#### Returns - -`string` - -#### Defined in - -[packages/sdk/contractkit/src/identity/metadata.ts:166](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/identity/metadata.ts#L166) - -___ - -### fetchFromURL - -▸ **fetchFromURL**(`contractKitOrAccountsWrapper`, `url`, `tries?`): `Promise`\<[`IdentityMetadataWrapper`](identity_metadata.IdentityMetadataWrapper.md)\> - -#### Parameters - -| Name | Type | Default value | -| :------ | :------ | :------ | -| `contractKitOrAccountsWrapper` | `KitOrAccountsWrapper` | `undefined` | -| `url` | `string` | `undefined` | -| `tries` | `number` | `3` | - -#### Returns - -`Promise`\<[`IdentityMetadataWrapper`](identity_metadata.IdentityMetadataWrapper.md)\> - -#### Defined in - -[packages/sdk/contractkit/src/identity/metadata.ts:44](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/identity/metadata.ts#L44) - -___ - -### fromEmpty - -▸ **fromEmpty**(`address`): [`IdentityMetadataWrapper`](identity_metadata.IdentityMetadataWrapper.md) - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `address` | `string` | - -#### Returns - -[`IdentityMetadataWrapper`](identity_metadata.IdentityMetadataWrapper.md) - -#### Defined in - -[packages/sdk/contractkit/src/identity/metadata.ts:34](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/identity/metadata.ts#L34) - -___ - -### fromFile - -▸ **fromFile**(`contractKitOrAccountsWrapper`, `path`): `Promise`\<[`IdentityMetadataWrapper`](identity_metadata.IdentityMetadataWrapper.md)\> - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `contractKitOrAccountsWrapper` | `KitOrAccountsWrapper` | -| `path` | `string` | - -#### Returns - -`Promise`\<[`IdentityMetadataWrapper`](identity_metadata.IdentityMetadataWrapper.md)\> - -#### Defined in - -[packages/sdk/contractkit/src/identity/metadata.ts:63](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/identity/metadata.ts#L63) - -___ - -### fromRawString - -▸ **fromRawString**(`contractKitOrAccountsWrapper`, `rawData`): `Promise`\<[`IdentityMetadataWrapper`](identity_metadata.IdentityMetadataWrapper.md)\> - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `contractKitOrAccountsWrapper` | `KitOrAccountsWrapper` | -| `rawData` | `string` | - -#### Returns - -`Promise`\<[`IdentityMetadataWrapper`](identity_metadata.IdentityMetadataWrapper.md)\> - -#### Defined in - -[packages/sdk/contractkit/src/identity/metadata.ts:111](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/identity/metadata.ts#L111) - -___ - -### verifySigner - -▸ **verifySigner**(`contractKitOrAccountsWrapper`, `hash`, `signature`, `metadata`): `Promise`\<`boolean`\> - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `contractKitOrAccountsWrapper` | `KitOrAccountsWrapper` | -| `hash` | `any` | -| `signature` | `any` | -| `metadata` | `any` | - -#### Returns - -`Promise`\<`boolean`\> - -#### Defined in - -[packages/sdk/contractkit/src/identity/metadata.ts:74](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/identity/metadata.ts#L74) - -___ - -### verifySignerForAddress - -▸ **verifySignerForAddress**(`contractKitOrAccountsWrapper`, `hash`, `signature`, `address`): `Promise`\<`boolean`\> - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `contractKitOrAccountsWrapper` | `KitOrAccountsWrapper` | -| `hash` | `any` | -| `signature` | `any` | -| `address` | `string` | - -#### Returns - -`Promise`\<`boolean`\> - -#### Defined in - -[packages/sdk/contractkit/src/identity/metadata.ts:88](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/identity/metadata.ts#L88) diff --git a/docs/sdk/contractkit/enums/identity_claims_types.ClaimTypes.md b/docs/sdk/contractkit/enums/identity_claims_types.ClaimTypes.md deleted file mode 100644 index 56ba5d5c2..000000000 --- a/docs/sdk/contractkit/enums/identity_claims_types.ClaimTypes.md +++ /dev/null @@ -1,87 +0,0 @@ -[@celo/contractkit](../README.md) / [Exports](../modules.md) / [identity/claims/types](../modules/identity_claims_types.md) / ClaimTypes - -# Enumeration: ClaimTypes - -[identity/claims/types](../modules/identity_claims_types.md).ClaimTypes - -## Table of contents - -### Enumeration Members - -- [ACCOUNT](identity_claims_types.ClaimTypes.md#account) -- [DOMAIN](identity_claims_types.ClaimTypes.md#domain) -- [KEYBASE](identity_claims_types.ClaimTypes.md#keybase) -- [NAME](identity_claims_types.ClaimTypes.md#name) -- [PROFILE\_PICTURE](identity_claims_types.ClaimTypes.md#profile_picture) -- [STORAGE](identity_claims_types.ClaimTypes.md#storage) -- [TWITTER](identity_claims_types.ClaimTypes.md#twitter) - -## Enumeration Members - -### ACCOUNT - -• **ACCOUNT** = ``"ACCOUNT"`` - -#### Defined in - -[packages/sdk/contractkit/src/identity/claims/types.ts:10](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/identity/claims/types.ts#L10) - -___ - -### DOMAIN - -• **DOMAIN** = ``"DOMAIN"`` - -#### Defined in - -[packages/sdk/contractkit/src/identity/claims/types.ts:11](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/identity/claims/types.ts#L11) - -___ - -### KEYBASE - -• **KEYBASE** = ``"KEYBASE"`` - -#### Defined in - -[packages/sdk/contractkit/src/identity/claims/types.ts:12](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/identity/claims/types.ts#L12) - -___ - -### NAME - -• **NAME** = ``"NAME"`` - -#### Defined in - -[packages/sdk/contractkit/src/identity/claims/types.ts:13](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/identity/claims/types.ts#L13) - -___ - -### PROFILE\_PICTURE - -• **PROFILE\_PICTURE** = ``"PROFILE_PICTURE"`` - -#### Defined in - -[packages/sdk/contractkit/src/identity/claims/types.ts:14](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/identity/claims/types.ts#L14) - -___ - -### STORAGE - -• **STORAGE** = ``"STORAGE"`` - -#### Defined in - -[packages/sdk/contractkit/src/identity/claims/types.ts:15](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/identity/claims/types.ts#L15) - -___ - -### TWITTER - -• **TWITTER** = ``"TWITTER"`` - -#### Defined in - -[packages/sdk/contractkit/src/identity/claims/types.ts:16](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/identity/claims/types.ts#L16) diff --git a/docs/sdk/contractkit/modules.md b/docs/sdk/contractkit/modules.md index a8e5e19ab..e6f42afe6 100644 --- a/docs/sdk/contractkit/modules.md +++ b/docs/sdk/contractkit/modules.md @@ -12,13 +12,6 @@ - [celo-tokens](modules/celo_tokens.md) - [contract-cache](modules/contract_cache.md) - [globals](modules/globals.md) -- [identity](modules/identity.md) -- [identity/claims/account](modules/identity_claims_account.md) -- [identity/claims/claim](modules/identity_claims_claim.md) -- [identity/claims/keybase](modules/identity_claims_keybase.md) -- [identity/claims/types](modules/identity_claims_types.md) -- [identity/claims/verify](modules/identity_claims_verify.md) -- [identity/metadata](modules/identity_metadata.md) - [index](modules/index.md) - [kit](modules/kit.md) - [mini-contract-cache](modules/mini_contract_cache.md) diff --git a/docs/sdk/contractkit/modules/identity.md b/docs/sdk/contractkit/modules/identity.md deleted file mode 100644 index 52a056622..000000000 --- a/docs/sdk/contractkit/modules/identity.md +++ /dev/null @@ -1,36 +0,0 @@ -[@celo/contractkit](../README.md) / [Exports](../modules.md) / identity - -# Module: identity - -## Table of contents - -### References - -- [ClaimTypes](identity.md#claimtypes) -- [IdentityMetadata](identity.md#identitymetadata) -- [IdentityMetadataType](identity.md#identitymetadatatype) -- [IdentityMetadataWrapper](identity.md#identitymetadatawrapper) - -## References - -### ClaimTypes - -Re-exports [ClaimTypes](../enums/identity_claims_types.ClaimTypes.md) - -___ - -### IdentityMetadata - -Re-exports [IdentityMetadata](identity_metadata.md#identitymetadata) - -___ - -### IdentityMetadataType - -Re-exports [IdentityMetadataType](identity_metadata.md#identitymetadatatype) - -___ - -### IdentityMetadataWrapper - -Re-exports [IdentityMetadataWrapper](../classes/identity_metadata.IdentityMetadataWrapper.md) diff --git a/docs/sdk/contractkit/modules/identity_claims_account.md b/docs/sdk/contractkit/modules/identity_claims_account.md deleted file mode 100644 index 8d1d5fde6..000000000 --- a/docs/sdk/contractkit/modules/identity_claims_account.md +++ /dev/null @@ -1,78 +0,0 @@ -[@celo/contractkit](../README.md) / [Exports](../modules.md) / identity/claims/account - -# Module: identity/claims/account - -## Table of contents - -### Type Aliases - -- [AccountClaim](identity_claims_account.md#accountclaim) - -### Variables - -- [AccountClaimType](identity_claims_account.md#accountclaimtype) -- [AccountClaimTypeH](identity_claims_account.md#accountclaimtypeh) - -### Functions - -- [createAccountClaim](identity_claims_account.md#createaccountclaim) - -## Type Aliases - -### AccountClaim - -Ƭ **AccountClaim**: `t.TypeOf`\ - -#### Defined in - -[packages/sdk/contractkit/src/identity/claims/account.ts:35](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/identity/claims/account.ts#L35) - -## Variables - -### AccountClaimType - -• `Const` **AccountClaimType**: `Type`\<\{ `address`: `string` = AddressType; `publicKey`: `undefined` \| `string` ; `timestamp`: `number` = TimestampType; `type`: [`ACCOUNT`](../enums/identity_claims_types.ClaimTypes.md#account) }, `any`, `unknown`\> - -#### Defined in - -[packages/sdk/contractkit/src/identity/claims/account.ts:19](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/identity/claims/account.ts#L19) - -___ - -### AccountClaimTypeH - -• `Const` **AccountClaimTypeH**: `TypeC`\<\{ `address`: `Type`\<`string`, `string`, `unknown`\> = AddressType; `publicKey`: `UnionC`\<[`UndefinedC`, `Type`\<`string`, `string`, `unknown`\>]\> ; `timestamp`: `NumberC` = TimestampType; `type`: `LiteralC`\<[`ACCOUNT`](../enums/identity_claims_types.ClaimTypes.md#account)\> }\> - -Provide the type minus the validation that the public key and address are derived from the same private key - -#### Defined in - -[packages/sdk/contractkit/src/identity/claims/account.ts:11](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/identity/claims/account.ts#L11) - -## Functions - -### createAccountClaim - -▸ **createAccountClaim**(`address`, `publicKey?`): `Object` - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `address` | `string` | -| `publicKey?` | `string` | - -#### Returns - -`Object` - -| Name | Type | -| :------ | :------ | -| `address` | `string` | -| `publicKey` | `undefined` \| `string` | -| `timestamp` | `number` | -| `type` | [`ACCOUNT`](../enums/identity_claims_types.ClaimTypes.md#account) | - -#### Defined in - -[packages/sdk/contractkit/src/identity/claims/account.ts:37](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/identity/claims/account.ts#L37) diff --git a/docs/sdk/contractkit/modules/identity_claims_claim.md b/docs/sdk/contractkit/modules/identity_claims_claim.md deleted file mode 100644 index 051f8fd8b..000000000 --- a/docs/sdk/contractkit/modules/identity_claims_claim.md +++ /dev/null @@ -1,314 +0,0 @@ -[@celo/contractkit](../README.md) / [Exports](../modules.md) / identity/claims/claim - -# Module: identity/claims/claim - -## Table of contents - -### Type Aliases - -- [Claim](identity_claims_claim.md#claim) -- [ClaimPayload](identity_claims_claim.md#claimpayload) -- [DomainClaim](identity_claims_claim.md#domainclaim) -- [KeybaseClaim](identity_claims_claim.md#keybaseclaim) -- [NameClaim](identity_claims_claim.md#nameclaim) -- [StorageClaim](identity_claims_claim.md#storageclaim) - -### Variables - -- [ClaimType](identity_claims_claim.md#claimtype) -- [DOMAIN\_TXT\_HEADER](identity_claims_claim.md#domain_txt_header) -- [KeybaseClaimType](identity_claims_claim.md#keybaseclaimtype) -- [SignedClaimType](identity_claims_claim.md#signedclaimtype) - -### Functions - -- [createDomainClaim](identity_claims_claim.md#createdomainclaim) -- [createNameClaim](identity_claims_claim.md#createnameclaim) -- [createStorageClaim](identity_claims_claim.md#createstorageclaim) -- [hashOfClaim](identity_claims_claim.md#hashofclaim) -- [hashOfClaims](identity_claims_claim.md#hashofclaims) -- [isOfType](identity_claims_claim.md#isoftype) -- [serializeClaim](identity_claims_claim.md#serializeclaim) - -## Type Aliases - -### Claim - -Ƭ **Claim**: [`DomainClaim`](identity_claims_claim.md#domainclaim) \| [`KeybaseClaim`](identity_claims_claim.md#keybaseclaim) \| [`NameClaim`](identity_claims_claim.md#nameclaim) \| [`AccountClaim`](identity_claims_account.md#accountclaim) \| [`StorageClaim`](identity_claims_claim.md#storageclaim) - -#### Defined in - -[packages/sdk/contractkit/src/identity/claims/claim.ts:50](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/identity/claims/claim.ts#L50) - -___ - -### ClaimPayload - -Ƭ **ClaimPayload**\<`K`\>: `K` extends typeof [`DOMAIN`](../enums/identity_claims_types.ClaimTypes.md#domain) ? [`DomainClaim`](identity_claims_claim.md#domainclaim) : `K` extends typeof [`NAME`](../enums/identity_claims_types.ClaimTypes.md#name) ? [`NameClaim`](identity_claims_claim.md#nameclaim) : `K` extends typeof [`KEYBASE`](../enums/identity_claims_types.ClaimTypes.md#keybase) ? [`KeybaseClaim`](identity_claims_claim.md#keybaseclaim) : `K` extends typeof [`ACCOUNT`](../enums/identity_claims_types.ClaimTypes.md#account) ? [`AccountClaim`](identity_claims_account.md#accountclaim) : [`StorageClaim`](identity_claims_claim.md#storageclaim) - -#### Type parameters - -| Name | Type | -| :------ | :------ | -| `K` | extends [`ClaimTypes`](../enums/identity_claims_types.ClaimTypes.md) | - -#### Defined in - -[packages/sdk/contractkit/src/identity/claims/claim.ts:52](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/identity/claims/claim.ts#L52) - -___ - -### DomainClaim - -Ƭ **DomainClaim**: `t.TypeOf`\ - -#### Defined in - -[packages/sdk/contractkit/src/identity/claims/claim.ts:47](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/identity/claims/claim.ts#L47) - -___ - -### KeybaseClaim - -Ƭ **KeybaseClaim**: `t.TypeOf`\ - -#### Defined in - -[packages/sdk/contractkit/src/identity/claims/claim.ts:12](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/identity/claims/claim.ts#L12) - -___ - -### NameClaim - -Ƭ **NameClaim**: `t.TypeOf`\ - -#### Defined in - -[packages/sdk/contractkit/src/identity/claims/claim.ts:48](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/identity/claims/claim.ts#L48) - -___ - -### StorageClaim - -Ƭ **StorageClaim**: `t.TypeOf`\ - -#### Defined in - -[packages/sdk/contractkit/src/identity/claims/claim.ts:49](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/identity/claims/claim.ts#L49) - -## Variables - -### ClaimType - -• `Const` **ClaimType**: `UnionC`\<[`Type`\<\{ `address`: `string` = AddressType; `publicKey`: `undefined` \| `string` ; `timestamp`: `number` = TimestampType; `type`: [`ACCOUNT`](../enums/identity_claims_types.ClaimTypes.md#account) }, `any`, `unknown`\>, `TypeC`\<\{ `domain`: `StringC` = t.string; `timestamp`: `NumberC` = TimestampType; `type`: `LiteralC`\<[`DOMAIN`](../enums/identity_claims_types.ClaimTypes.md#domain)\> }\>, `TypeC`\<\{ `timestamp`: `NumberC` = TimestampType; `type`: `LiteralC`\<[`KEYBASE`](../enums/identity_claims_types.ClaimTypes.md#keybase)\> ; `username`: `StringC` = t.string }\>, `TypeC`\<\{ `name`: `StringC` = t.string; `timestamp`: `NumberC` = TimestampType; `type`: `LiteralC`\<[`NAME`](../enums/identity_claims_types.ClaimTypes.md#name)\> }\>, `TypeC`\<\{ `address`: `StringC` = t.string; `filteredDataPaths`: `StringC` = t.string; `timestamp`: `NumberC` = TimestampType; `type`: `LiteralC`\<[`STORAGE`](../enums/identity_claims_types.ClaimTypes.md#storage)\> }\>]\> - -#### Defined in - -[packages/sdk/contractkit/src/identity/claims/claim.ts:33](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/identity/claims/claim.ts#L33) - -___ - -### DOMAIN\_TXT\_HEADER - -• `Const` **DOMAIN\_TXT\_HEADER**: ``"celo-site-verification"`` - -#### Defined in - -[packages/sdk/contractkit/src/identity/claims/claim.ts:46](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/identity/claims/claim.ts#L46) - -___ - -### KeybaseClaimType - -• `Const` **KeybaseClaimType**: `TypeC`\<\{ `timestamp`: `NumberC` = TimestampType; `type`: `LiteralC`\<[`KEYBASE`](../enums/identity_claims_types.ClaimTypes.md#keybase)\> ; `username`: `StringC` = t.string }\> - -#### Defined in - -[packages/sdk/contractkit/src/identity/claims/claim.ts:6](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/identity/claims/claim.ts#L6) - -___ - -### SignedClaimType - -• `Const` **SignedClaimType**: `TypeC`\<\{ `claim`: `UnionC`\<[`Type`\<\{ `address`: `string` = AddressType; `publicKey`: `undefined` \| `string` ; `timestamp`: `number` = TimestampType; `type`: [`ACCOUNT`](../enums/identity_claims_types.ClaimTypes.md#account) }, `any`, `unknown`\>, `TypeC`\<\{ `domain`: `StringC` = t.string; `timestamp`: `NumberC` = TimestampType; `type`: `LiteralC`\<[`DOMAIN`](../enums/identity_claims_types.ClaimTypes.md#domain)\> }\>, `TypeC`\<\{ `timestamp`: `NumberC` = TimestampType; `type`: `LiteralC`\<[`KEYBASE`](../enums/identity_claims_types.ClaimTypes.md#keybase)\> ; `username`: `StringC` = t.string }\>, `TypeC`\<\{ `name`: `StringC` = t.string; `timestamp`: `NumberC` = TimestampType; `type`: `LiteralC`\<[`NAME`](../enums/identity_claims_types.ClaimTypes.md#name)\> }\>, `TypeC`\<\{ `address`: `StringC` = t.string; `filteredDataPaths`: `StringC` = t.string; `timestamp`: `NumberC` = TimestampType; `type`: `LiteralC`\<[`STORAGE`](../enums/identity_claims_types.ClaimTypes.md#storage)\> }\>]\> = ClaimType; `signature`: `StringC` = SignatureType }\> - -#### Defined in - -[packages/sdk/contractkit/src/identity/claims/claim.ts:41](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/identity/claims/claim.ts#L41) - -## Functions - -### createDomainClaim - -▸ **createDomainClaim**(`domain`): `Object` - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `domain` | `string` | - -#### Returns - -`Object` - -| Name | Type | -| :------ | :------ | -| `domain` | `string` | -| `timestamp` | `number` | -| `type` | [`DOMAIN`](../enums/identity_claims_types.ClaimTypes.md#domain) | - -#### Defined in - -[packages/sdk/contractkit/src/identity/claims/claim.ts:87](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/identity/claims/claim.ts#L87) - -___ - -### createNameClaim - -▸ **createNameClaim**(`name`): `Object` - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `name` | `string` | - -#### Returns - -`Object` - -| Name | Type | -| :------ | :------ | -| `name` | `string` | -| `timestamp` | `number` | -| `type` | [`NAME`](../enums/identity_claims_types.ClaimTypes.md#name) | - -#### Defined in - -[packages/sdk/contractkit/src/identity/claims/claim.ts:81](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/identity/claims/claim.ts#L81) - -___ - -### createStorageClaim - -▸ **createStorageClaim**(`storageURL`): `Object` - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `storageURL` | `string` | - -#### Returns - -`Object` - -| Name | Type | -| :------ | :------ | -| `address` | `string` | -| `filteredDataPaths` | `string` | -| `timestamp` | `number` | -| `type` | [`STORAGE`](../enums/identity_claims_types.ClaimTypes.md#storage) | - -#### Defined in - -[packages/sdk/contractkit/src/identity/claims/claim.ts:93](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/identity/claims/claim.ts#L93) - -___ - -### hashOfClaim - -▸ **hashOfClaim**(`claim`): `string` - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `claim` | [`Claim`](identity_claims_claim.md#claim) | - -#### Returns - -`string` - -#### Defined in - -[packages/sdk/contractkit/src/identity/claims/claim.ts:68](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/identity/claims/claim.ts#L68) - -___ - -### hashOfClaims - -▸ **hashOfClaims**(`claims`): `string` - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `claims` | [`Claim`](identity_claims_claim.md#claim)[] | - -#### Returns - -`string` - -#### Defined in - -[packages/sdk/contractkit/src/identity/claims/claim.ts:72](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/identity/claims/claim.ts#L72) - -___ - -### isOfType - -▸ **isOfType**\<`K`\>(`type`): (`data`: [`Claim`](identity_claims_claim.md#claim)) => data is ClaimPayload\ - -#### Type parameters - -| Name | Type | -| :------ | :------ | -| `K` | extends [`ClaimTypes`](../enums/identity_claims_types.ClaimTypes.md) | - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `type` | `K` | - -#### Returns - -`fn` - -▸ (`data`): data is ClaimPayload\ - -##### Parameters - -| Name | Type | -| :------ | :------ | -| `data` | [`Claim`](identity_claims_claim.md#claim) | - -##### Returns - -data is ClaimPayload\ - -#### Defined in - -[packages/sdk/contractkit/src/identity/claims/claim.ts:64](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/identity/claims/claim.ts#L64) - -___ - -### serializeClaim - -▸ **serializeClaim**(`claim`): `string` - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `claim` | [`Claim`](identity_claims_claim.md#claim) | - -#### Returns - -`string` - -#### Defined in - -[packages/sdk/contractkit/src/identity/claims/claim.ts:77](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/identity/claims/claim.ts#L77) diff --git a/docs/sdk/contractkit/modules/identity_claims_keybase.md b/docs/sdk/contractkit/modules/identity_claims_keybase.md deleted file mode 100644 index 6db0b2f1d..000000000 --- a/docs/sdk/contractkit/modules/identity_claims_keybase.md +++ /dev/null @@ -1,125 +0,0 @@ -[@celo/contractkit](../README.md) / [Exports](../modules.md) / identity/claims/keybase - -# Module: identity/claims/keybase - -## Table of contents - -### Variables - -- [keybaseFilePathToProof](identity_claims_keybase.md#keybasefilepathtoproof) - -### Functions - -- [createKeybaseClaim](identity_claims_keybase.md#createkeybaseclaim) -- [proofFileName](identity_claims_keybase.md#prooffilename) -- [targetURL](identity_claims_keybase.md#targeturl) -- [verifyKeybaseClaim](identity_claims_keybase.md#verifykeybaseclaim) - -## Variables - -### keybaseFilePathToProof - -• `Const` **keybaseFilePathToProof**: ``".well-known/celo/"`` - -#### Defined in - -[packages/sdk/contractkit/src/identity/claims/keybase.ts:9](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/identity/claims/keybase.ts#L9) - -## Functions - -### createKeybaseClaim - -▸ **createKeybaseClaim**(`username`): `Object` - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `username` | `string` | - -#### Returns - -`Object` - -| Name | Type | -| :------ | :------ | -| `timestamp` | `number` | -| `type` | [`KEYBASE`](../enums/identity_claims_types.ClaimTypes.md#keybase) | -| `username` | `string` | - -#### Defined in - -[packages/sdk/contractkit/src/identity/claims/keybase.ts:72](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/identity/claims/keybase.ts#L72) - -___ - -### proofFileName - -▸ **proofFileName**(`address`): `string` - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `address` | `string` | - -#### Returns - -`string` - -#### Defined in - -[packages/sdk/contractkit/src/identity/claims/keybase.ts:10](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/identity/claims/keybase.ts#L10) - -___ - -### targetURL - -▸ **targetURL**(`username`, `address`): `string` - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `username` | `string` | -| `address` | `string` | - -#### Returns - -`string` - -#### Defined in - -[packages/sdk/contractkit/src/identity/claims/keybase.ts:11](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/identity/claims/keybase.ts#L11) - -___ - -### verifyKeybaseClaim - -▸ **verifyKeybaseClaim**(`kit`, `claim`, `signer`): `Promise`\<`string` \| `undefined`\> - -#### Parameters - -| Name | Type | Default value | -| :------ | :------ | :------ | -| `kit` | [`ContractKit`](../classes/kit.ContractKit.md) | `undefined` | -| `claim` | `Object` | `undefined` | -| `claim.timestamp` | `number` | `TimestampType` | -| `claim.type` | [`KEYBASE`](../enums/identity_claims_types.ClaimTypes.md#keybase) | `undefined` | -| `claim.username` | `string` | `t.string` | -| `signer` | `string` | `undefined` | - -#### Returns - -`Promise`\<`string` \| `undefined`\> - -a human readable string with claims (non)verifiability or undefined - -**`Remarks`** - -If verification encounters an error, returns the error message as a string -otherwise returns undefined when successful - -#### Defined in - -[packages/sdk/contractkit/src/identity/claims/keybase.ts:26](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/identity/claims/keybase.ts#L26) diff --git a/docs/sdk/contractkit/modules/identity_claims_types.md b/docs/sdk/contractkit/modules/identity_claims_types.md deleted file mode 100644 index ddfb3dca5..000000000 --- a/docs/sdk/contractkit/modules/identity_claims_types.md +++ /dev/null @@ -1,74 +0,0 @@ -[@celo/contractkit](../README.md) / [Exports](../modules.md) / identity/claims/types - -# Module: identity/claims/types - -## Table of contents - -### Enumerations - -- [ClaimTypes](../enums/identity_claims_types.ClaimTypes.md) - -### Variables - -- [SINGULAR\_CLAIM\_TYPES](identity_claims_types.md#singular_claim_types) -- [SignatureType](identity_claims_types.md#signaturetype) -- [TimestampType](identity_claims_types.md#timestamptype) -- [VERIFIABLE\_CLAIM\_TYPES](identity_claims_types.md#verifiable_claim_types) - -### Functions - -- [now](identity_claims_types.md#now) - -## Variables - -### SINGULAR\_CLAIM\_TYPES - -• `Const` **SINGULAR\_CLAIM\_TYPES**: [`ClaimTypes`](../enums/identity_claims_types.ClaimTypes.md)[] - -#### Defined in - -[packages/sdk/contractkit/src/identity/claims/types.ts:20](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/identity/claims/types.ts#L20) - -___ - -### SignatureType - -• `Const` **SignatureType**: `StringC` = `t.string` - -#### Defined in - -[packages/sdk/contractkit/src/identity/claims/types.ts:3](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/identity/claims/types.ts#L3) - -___ - -### TimestampType - -• `Const` **TimestampType**: `NumberC` = `t.number` - -#### Defined in - -[packages/sdk/contractkit/src/identity/claims/types.ts:4](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/identity/claims/types.ts#L4) - -___ - -### VERIFIABLE\_CLAIM\_TYPES - -• `Const` **VERIFIABLE\_CLAIM\_TYPES**: [`ClaimTypes`](../enums/identity_claims_types.ClaimTypes.md)[] - -#### Defined in - -[packages/sdk/contractkit/src/identity/claims/types.ts:19](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/identity/claims/types.ts#L19) - -## Functions - -### now - -▸ **now**(): `number` - -#### Returns - -`number` - -#### Defined in - -[packages/sdk/contractkit/src/identity/claims/types.ts:7](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/identity/claims/types.ts#L7) diff --git a/docs/sdk/contractkit/modules/identity_claims_verify.md b/docs/sdk/contractkit/modules/identity_claims_verify.md deleted file mode 100644 index f46fe860a..000000000 --- a/docs/sdk/contractkit/modules/identity_claims_verify.md +++ /dev/null @@ -1,94 +0,0 @@ -[@celo/contractkit](../README.md) / [Exports](../modules.md) / identity/claims/verify - -# Module: identity/claims/verify - -## Table of contents - -### Functions - -- [verifyAccountClaim](identity_claims_verify.md#verifyaccountclaim) -- [verifyClaim](identity_claims_verify.md#verifyclaim) -- [verifyDomainRecord](identity_claims_verify.md#verifydomainrecord) - -## Functions - -### verifyAccountClaim - -▸ **verifyAccountClaim**(`kit`, `claim`, `address`, `tries?`): `Promise`\<`undefined` \| `string`\> - -#### Parameters - -| Name | Type | Default value | -| :------ | :------ | :------ | -| `kit` | [`ContractKit`](../classes/kit.ContractKit.md) | `undefined` | -| `claim` | `Object` | `undefined` | -| `claim.address` | `string` | `AddressType` | -| `claim.publicKey` | `undefined` \| `string` | `undefined` | -| `claim.timestamp` | `number` | `TimestampType` | -| `claim.type` | [`ACCOUNT`](../enums/identity_claims_types.ClaimTypes.md#account) | `undefined` | -| `address` | `string` | `undefined` | -| `tries` | `number` | `3` | - -#### Returns - -`Promise`\<`undefined` \| `string`\> - -#### Defined in - -[packages/sdk/contractkit/src/identity/claims/verify.ts:33](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/identity/claims/verify.ts#L33) - -___ - -### verifyClaim - -▸ **verifyClaim**(`kit`, `claim`, `address`, `tries?`): `Promise`\<`undefined` \| `string`\> - -Verifies a claim made by an account, i.e. whether a claim can be verified to be correct - -#### Parameters - -| Name | Type | Default value | Description | -| :------ | :------ | :------ | :------ | -| `kit` | [`ContractKit`](../classes/kit.ContractKit.md) | `undefined` | ContractKit object | -| `claim` | [`Claim`](identity_claims_claim.md#claim) | `undefined` | The claim to verify | -| `address` | `string` | `undefined` | The address that is making the claim | -| `tries` | `number` | `3` | - | - -#### Returns - -`Promise`\<`undefined` \| `string`\> - -If valid, returns undefined. If invalid or unable to verify, returns a string with the error - -#### Defined in - -[packages/sdk/contractkit/src/identity/claims/verify.ts:19](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/identity/claims/verify.ts#L19) - -___ - -### verifyDomainRecord - -▸ **verifyDomainRecord**(`kit`, `claim`, `address`, `dnsResolver?`): `Promise`\<`undefined` \| `string`\> - -It verifies if a DNS domain includes in the TXT records an entry with name -`celo-site-verification` and a valid signature in base64 - -#### Parameters - -| Name | Type | Default value | -| :------ | :------ | :------ | -| `kit` | [`ContractKit`](../classes/kit.ContractKit.md) | `undefined` | -| `claim` | `Object` | `undefined` | -| `claim.domain` | `string` | `t.string` | -| `claim.timestamp` | `number` | `TimestampType` | -| `claim.type` | [`DOMAIN`](../enums/identity_claims_types.ClaimTypes.md#domain) | `undefined` | -| `address` | `string` | `undefined` | -| `dnsResolver` | `dnsResolverFunction` | `undefined` | - -#### Returns - -`Promise`\<`undefined` \| `string`\> - -#### Defined in - -[packages/sdk/contractkit/src/identity/claims/verify.ts:76](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/identity/claims/verify.ts#L76) diff --git a/docs/sdk/contractkit/modules/identity_metadata.md b/docs/sdk/contractkit/modules/identity_metadata.md deleted file mode 100644 index 1266d1ee1..000000000 --- a/docs/sdk/contractkit/modules/identity_metadata.md +++ /dev/null @@ -1,47 +0,0 @@ -[@celo/contractkit](../README.md) / [Exports](../modules.md) / identity/metadata - -# Module: identity/metadata - -## Table of contents - -### References - -- [ClaimTypes](identity_metadata.md#claimtypes) - -### Classes - -- [IdentityMetadataWrapper](../classes/identity_metadata.IdentityMetadataWrapper.md) - -### Type Aliases - -- [IdentityMetadata](identity_metadata.md#identitymetadata) - -### Variables - -- [IdentityMetadataType](identity_metadata.md#identitymetadatatype) - -## References - -### ClaimTypes - -Re-exports [ClaimTypes](../enums/identity_claims_types.ClaimTypes.md) - -## Type Aliases - -### IdentityMetadata - -Ƭ **IdentityMetadata**: `t.TypeOf`\ - -#### Defined in - -[packages/sdk/contractkit/src/identity/metadata.ts:29](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/identity/metadata.ts#L29) - -## Variables - -### IdentityMetadataType - -• `Const` **IdentityMetadataType**: `TypeC`\<\{ `claims`: `ArrayC`\<`UnionC`\<[`Type`\<\{ `address`: `string` = AddressType; `publicKey`: `undefined` \| `string` ; `timestamp`: `number` = TimestampType; `type`: [`ACCOUNT`](../enums/identity_claims_types.ClaimTypes.md#account) }, `any`, `unknown`\>, `TypeC`\<\{ `domain`: `StringC` = t.string; `timestamp`: `NumberC` = TimestampType; `type`: `LiteralC`\<[`DOMAIN`](../enums/identity_claims_types.ClaimTypes.md#domain)\> }\>, `TypeC`\<\{ `timestamp`: `NumberC` = TimestampType; `type`: `LiteralC`\<[`KEYBASE`](../enums/identity_claims_types.ClaimTypes.md#keybase)\> ; `username`: `StringC` = t.string }\>, `TypeC`\<\{ `name`: `StringC` = t.string; `timestamp`: `NumberC` = TimestampType; `type`: `LiteralC`\<[`NAME`](../enums/identity_claims_types.ClaimTypes.md#name)\> }\>, `TypeC`\<\{ `address`: `StringC` = t.string; `filteredDataPaths`: `StringC` = t.string; `timestamp`: `NumberC` = TimestampType; `type`: `LiteralC`\<[`STORAGE`](../enums/identity_claims_types.ClaimTypes.md#storage)\> }\>]\>\> ; `meta`: `TypeC`\<\{ `address`: `Type`\<`string`, `string`, `unknown`\> = AddressType; `signature`: `StringC` = SignatureType }\> = MetaType }\> - -#### Defined in - -[packages/sdk/contractkit/src/identity/metadata.ts:24](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/identity/metadata.ts#L24) diff --git a/docs/sdk/contractkit/modules/index.md b/docs/sdk/contractkit/modules/index.md index 9aa49df9b..4539901cc 100644 --- a/docs/sdk/contractkit/modules/index.md +++ b/docs/sdk/contractkit/modules/index.md @@ -16,7 +16,6 @@ - [ContractKit](index.md#contractkit) - [GET\_IMPLEMENTATION\_ABI](index.md#get_implementation_abi) - [HttpProviderOptions](index.md#httpprovideroptions) -- [IdentityMetadataWrapper](index.md#identitymetadatawrapper) - [NetworkConfig](index.md#networkconfig) - [PROXY\_ABI](index.md#proxy_abi) - [PROXY\_SET\_AND\_INITIALIZE\_IMPLEMENTATION\_SIGNATURE](index.md#proxy_set_and_initialize_implementation_signature) @@ -103,12 +102,6 @@ Re-exports [HttpProviderOptions](setupForKits.md#httpprovideroptions) ___ -### IdentityMetadataWrapper - -Re-exports [IdentityMetadataWrapper](../classes/identity_metadata.IdentityMetadataWrapper.md) - -___ - ### NetworkConfig Re-exports [NetworkConfig](../interfaces/kit.NetworkConfig.md) diff --git a/docs/sdk/metadata-claims/README.md b/docs/sdk/metadata-claims/README.md new file mode 100644 index 000000000..b363d7ef3 --- /dev/null +++ b/docs/sdk/metadata-claims/README.md @@ -0,0 +1,15 @@ +@celo/metadata-claims + +# @celo/metadata-claims + +## Table of contents + +### Modules + +- [account](modules/account.md) +- [claim](modules/claim.md) +- [index](modules/index.md) +- [keybase](modules/keybase.md) +- [metadata](modules/metadata.md) +- [types](modules/types.md) +- [verify](modules/verify.md) diff --git a/docs/sdk/metadata-claims/classes/metadata.IdentityMetadataWrapper.md b/docs/sdk/metadata-claims/classes/metadata.IdentityMetadataWrapper.md new file mode 100644 index 000000000..589bc5417 --- /dev/null +++ b/docs/sdk/metadata-claims/classes/metadata.IdentityMetadataWrapper.md @@ -0,0 +1,321 @@ +[@celo/metadata-claims](../README.md) / [metadata](../modules/metadata.md) / IdentityMetadataWrapper + +# Class: IdentityMetadataWrapper + +[metadata](../modules/metadata.md).IdentityMetadataWrapper + +## Table of contents + +### Constructors + +- [constructor](metadata.IdentityMetadataWrapper.md#constructor) + +### Properties + +- [data](metadata.IdentityMetadataWrapper.md#data) + +### Accessors + +- [claims](metadata.IdentityMetadataWrapper.md#claims) + +### Methods + +- [addClaim](metadata.IdentityMetadataWrapper.md#addclaim) +- [filterClaims](metadata.IdentityMetadataWrapper.md#filterclaims) +- [findClaim](metadata.IdentityMetadataWrapper.md#findclaim) +- [hashOfClaims](metadata.IdentityMetadataWrapper.md#hashofclaims) +- [toString](metadata.IdentityMetadataWrapper.md#tostring) +- [fetchFromURL](metadata.IdentityMetadataWrapper.md#fetchfromurl) +- [fromEmpty](metadata.IdentityMetadataWrapper.md#fromempty) +- [fromFile](metadata.IdentityMetadataWrapper.md#fromfile) +- [fromRawString](metadata.IdentityMetadataWrapper.md#fromrawstring) +- [verifySigner](metadata.IdentityMetadataWrapper.md#verifysigner) +- [verifySignerForAddress](metadata.IdentityMetadataWrapper.md#verifysignerforaddress) + +## Constructors + +### constructor + +• **new IdentityMetadataWrapper**(`data`): [`IdentityMetadataWrapper`](metadata.IdentityMetadataWrapper.md) + +#### Parameters + +| Name | Type | Default value | +| :------ | :------ | :------ | +| `data` | `Object` | `undefined` | +| `data.claims` | (\{ `address`: `string` = AddressType; `publicKey`: `undefined` \| `string` ; `timestamp`: `number` = TimestampType; `type`: [`ACCOUNT`](../enums/types.ClaimTypes.md#account) } \| \{ `timestamp`: `number` = TimestampType; `type`: [`KEYBASE`](../enums/types.ClaimTypes.md#keybase) ; `username`: `string` = t.string } \| \{ `domain`: `string` = t.string; `timestamp`: `number` = TimestampType; `type`: [`DOMAIN`](../enums/types.ClaimTypes.md#domain) } \| \{ `name`: `string` = t.string; `timestamp`: `number` = TimestampType; `type`: [`NAME`](../enums/types.ClaimTypes.md#name) } \| \{ `address`: `string` = t.string; `filteredDataPaths`: `string` = t.string; `timestamp`: `number` = TimestampType; `type`: [`STORAGE`](../enums/types.ClaimTypes.md#storage) })[] | `undefined` | +| `data.meta` | `Object` | `MetaType` | +| `data.meta.address` | `string` | `AddressType` | +| `data.meta.signature` | `string` | `SignatureType` | + +#### Returns + +[`IdentityMetadataWrapper`](metadata.IdentityMetadataWrapper.md) + +#### Defined in + +[packages/sdk/metadata-claims/src/metadata.ts:157](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/metadata-claims/src/metadata.ts#L157) + +## Properties + +### data + +• **data**: `Object` + +#### Type declaration + +| Name | Type | +| :------ | :------ | +| `claims` | (\{ `address`: `string` = AddressType; `publicKey`: `undefined` \| `string` ; `timestamp`: `number` = TimestampType; `type`: [`ACCOUNT`](../enums/types.ClaimTypes.md#account) } \| \{ `timestamp`: `number` = TimestampType; `type`: [`KEYBASE`](../enums/types.ClaimTypes.md#keybase) ; `username`: `string` = t.string } \| \{ `domain`: `string` = t.string; `timestamp`: `number` = TimestampType; `type`: [`DOMAIN`](../enums/types.ClaimTypes.md#domain) } \| \{ `name`: `string` = t.string; `timestamp`: `number` = TimestampType; `type`: [`NAME`](../enums/types.ClaimTypes.md#name) } \| \{ `address`: `string` = t.string; `filteredDataPaths`: `string` = t.string; `timestamp`: `number` = TimestampType; `type`: [`STORAGE`](../enums/types.ClaimTypes.md#storage) })[] | +| `meta` | \{ `address`: `string` = AddressType; `signature`: `string` = SignatureType } | +| `meta.address` | `string` | +| `meta.signature` | `string` | + +#### Defined in + +[packages/sdk/metadata-claims/src/metadata.ts:35](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/metadata-claims/src/metadata.ts#L35) + +## Accessors + +### claims + +• `get` **claims**(): (\{ `address`: `string` = AddressType; `publicKey`: `undefined` \| `string` ; `timestamp`: `number` = TimestampType; `type`: [`ACCOUNT`](../enums/types.ClaimTypes.md#account) } \| \{ `timestamp`: `number` = TimestampType; `type`: [`KEYBASE`](../enums/types.ClaimTypes.md#keybase) ; `username`: `string` = t.string } \| \{ `domain`: `string` = t.string; `timestamp`: `number` = TimestampType; `type`: [`DOMAIN`](../enums/types.ClaimTypes.md#domain) } \| \{ `name`: `string` = t.string; `timestamp`: `number` = TimestampType; `type`: [`NAME`](../enums/types.ClaimTypes.md#name) } \| \{ `address`: `string` = t.string; `filteredDataPaths`: `string` = t.string; `timestamp`: `number` = TimestampType; `type`: [`STORAGE`](../enums/types.ClaimTypes.md#storage) })[] + +#### Returns + +(\{ `address`: `string` = AddressType; `publicKey`: `undefined` \| `string` ; `timestamp`: `number` = TimestampType; `type`: [`ACCOUNT`](../enums/types.ClaimTypes.md#account) } \| \{ `timestamp`: `number` = TimestampType; `type`: [`KEYBASE`](../enums/types.ClaimTypes.md#keybase) ; `username`: `string` = t.string } \| \{ `domain`: `string` = t.string; `timestamp`: `number` = TimestampType; `type`: [`DOMAIN`](../enums/types.ClaimTypes.md#domain) } \| \{ `name`: `string` = t.string; `timestamp`: `number` = TimestampType; `type`: [`NAME`](../enums/types.ClaimTypes.md#name) } \| \{ `address`: `string` = t.string; `filteredDataPaths`: `string` = t.string; `timestamp`: `number` = TimestampType; `type`: [`STORAGE`](../enums/types.ClaimTypes.md#storage) })[] + +#### Defined in + +[packages/sdk/metadata-claims/src/metadata.ts:161](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/metadata-claims/src/metadata.ts#L161) + +## Methods + +### addClaim + +▸ **addClaim**(`claim`, `signer`): `Promise`\<[`Claim`](../modules/claim.md#claim)\> + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `claim` | [`Claim`](../modules/claim.md#claim) | +| `signer` | `Signer` | + +#### Returns + +`Promise`\<[`Claim`](../modules/claim.md#claim)\> + +#### Defined in + +[packages/sdk/metadata-claims/src/metadata.ts:176](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/metadata-claims/src/metadata.ts#L176) + +___ + +### filterClaims + +▸ **filterClaims**\<`K`\>(`type`): [`ClaimPayload`](../modules/claim.md#claimpayload)\<`K`\>[] + +#### Type parameters + +| Name | Type | +| :------ | :------ | +| `K` | extends [`ClaimTypes`](../enums/types.ClaimTypes.md) | + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `type` | `K` | + +#### Returns + +[`ClaimPayload`](../modules/claim.md#claimpayload)\<`K`\>[] + +#### Defined in + +[packages/sdk/metadata-claims/src/metadata.ts:216](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/metadata-claims/src/metadata.ts#L216) + +___ + +### findClaim + +▸ **findClaim**\<`K`\>(`type`): `undefined` \| [`ClaimPayload`](../modules/claim.md#claimpayload)\<`K`\> + +#### Type parameters + +| Name | Type | +| :------ | :------ | +| `K` | extends [`ClaimTypes`](../enums/types.ClaimTypes.md) | + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `type` | `K` | + +#### Returns + +`undefined` \| [`ClaimPayload`](../modules/claim.md#claimpayload)\<`K`\> + +#### Defined in + +[packages/sdk/metadata-claims/src/metadata.ts:212](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/metadata-claims/src/metadata.ts#L212) + +___ + +### hashOfClaims + +▸ **hashOfClaims**(): `string` + +#### Returns + +`string` + +#### Defined in + +[packages/sdk/metadata-claims/src/metadata.ts:165](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/metadata-claims/src/metadata.ts#L165) + +___ + +### toString + +▸ **toString**(): `string` + +#### Returns + +`string` + +#### Defined in + +[packages/sdk/metadata-claims/src/metadata.ts:169](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/metadata-claims/src/metadata.ts#L169) + +___ + +### fetchFromURL + +▸ **fetchFromURL**(`contractKitOrAccountsWrapper`, `url`, `tries?`): `Promise`\<[`IdentityMetadataWrapper`](metadata.IdentityMetadataWrapper.md)\> + +#### Parameters + +| Name | Type | Default value | +| :------ | :------ | :------ | +| `contractKitOrAccountsWrapper` | [`AccountMetadataSignerGetters`](../modules/types.md#accountmetadatasignergetters) | `undefined` | +| `url` | `string` | `undefined` | +| `tries` | `number` | `3` | + +#### Returns + +`Promise`\<[`IdentityMetadataWrapper`](metadata.IdentityMetadataWrapper.md)\> + +#### Defined in + +[packages/sdk/metadata-claims/src/metadata.ts:47](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/metadata-claims/src/metadata.ts#L47) + +___ + +### fromEmpty + +▸ **fromEmpty**(`address`): [`IdentityMetadataWrapper`](metadata.IdentityMetadataWrapper.md) + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `address` | `string` | + +#### Returns + +[`IdentityMetadataWrapper`](metadata.IdentityMetadataWrapper.md) + +#### Defined in + +[packages/sdk/metadata-claims/src/metadata.ts:37](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/metadata-claims/src/metadata.ts#L37) + +___ + +### fromFile + +▸ **fromFile**(`contractKitOrAccountsWrapper`, `path`): `Promise`\<[`IdentityMetadataWrapper`](metadata.IdentityMetadataWrapper.md)\> + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `contractKitOrAccountsWrapper` | [`AccountMetadataSignerGetters`](../modules/types.md#accountmetadatasignergetters) | +| `path` | `string` | + +#### Returns + +`Promise`\<[`IdentityMetadataWrapper`](metadata.IdentityMetadataWrapper.md)\> + +#### Defined in + +[packages/sdk/metadata-claims/src/metadata.ts:66](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/metadata-claims/src/metadata.ts#L66) + +___ + +### fromRawString + +▸ **fromRawString**(`contractKitOrAccountsWrapper`, `rawData`): `Promise`\<[`IdentityMetadataWrapper`](metadata.IdentityMetadataWrapper.md)\> + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `contractKitOrAccountsWrapper` | [`AccountMetadataSignerGetters`](../modules/types.md#accountmetadatasignergetters) | +| `rawData` | `string` | + +#### Returns + +`Promise`\<[`IdentityMetadataWrapper`](metadata.IdentityMetadataWrapper.md)\> + +#### Defined in + +[packages/sdk/metadata-claims/src/metadata.ts:114](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/metadata-claims/src/metadata.ts#L114) + +___ + +### verifySigner + +▸ **verifySigner**(`contractKitOrAccountsWrapper`, `hash`, `signature`, `metadata`): `Promise`\<`boolean`\> + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `contractKitOrAccountsWrapper` | [`AccountMetadataSignerGetters`](../modules/types.md#accountmetadatasignergetters) | +| `hash` | `any` | +| `signature` | `any` | +| `metadata` | `any` | + +#### Returns + +`Promise`\<`boolean`\> + +#### Defined in + +[packages/sdk/metadata-claims/src/metadata.ts:77](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/metadata-claims/src/metadata.ts#L77) + +___ + +### verifySignerForAddress + +▸ **verifySignerForAddress**(`contractKitOrAccountsWrapper`, `hash`, `signature`, `address`): `Promise`\<`boolean`\> + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `contractKitOrAccountsWrapper` | [`AccountMetadataSignerGetters`](../modules/types.md#accountmetadatasignergetters) | +| `hash` | `any` | +| `signature` | `any` | +| `address` | `string` | + +#### Returns + +`Promise`\<`boolean`\> + +#### Defined in + +[packages/sdk/metadata-claims/src/metadata.ts:91](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/metadata-claims/src/metadata.ts#L91) diff --git a/docs/sdk/metadata-claims/enums/types.ClaimTypes.md b/docs/sdk/metadata-claims/enums/types.ClaimTypes.md new file mode 100644 index 000000000..3d4949116 --- /dev/null +++ b/docs/sdk/metadata-claims/enums/types.ClaimTypes.md @@ -0,0 +1,87 @@ +[@celo/metadata-claims](../README.md) / [types](../modules/types.md) / ClaimTypes + +# Enumeration: ClaimTypes + +[types](../modules/types.md).ClaimTypes + +## Table of contents + +### Enumeration Members + +- [ACCOUNT](types.ClaimTypes.md#account) +- [DOMAIN](types.ClaimTypes.md#domain) +- [KEYBASE](types.ClaimTypes.md#keybase) +- [NAME](types.ClaimTypes.md#name) +- [PROFILE\_PICTURE](types.ClaimTypes.md#profile_picture) +- [STORAGE](types.ClaimTypes.md#storage) +- [TWITTER](types.ClaimTypes.md#twitter) + +## Enumeration Members + +### ACCOUNT + +• **ACCOUNT** = ``"ACCOUNT"`` + +#### Defined in + +[packages/sdk/metadata-claims/src/types.ts:12](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/metadata-claims/src/types.ts#L12) + +___ + +### DOMAIN + +• **DOMAIN** = ``"DOMAIN"`` + +#### Defined in + +[packages/sdk/metadata-claims/src/types.ts:13](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/metadata-claims/src/types.ts#L13) + +___ + +### KEYBASE + +• **KEYBASE** = ``"KEYBASE"`` + +#### Defined in + +[packages/sdk/metadata-claims/src/types.ts:14](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/metadata-claims/src/types.ts#L14) + +___ + +### NAME + +• **NAME** = ``"NAME"`` + +#### Defined in + +[packages/sdk/metadata-claims/src/types.ts:15](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/metadata-claims/src/types.ts#L15) + +___ + +### PROFILE\_PICTURE + +• **PROFILE\_PICTURE** = ``"PROFILE_PICTURE"`` + +#### Defined in + +[packages/sdk/metadata-claims/src/types.ts:16](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/metadata-claims/src/types.ts#L16) + +___ + +### STORAGE + +• **STORAGE** = ``"STORAGE"`` + +#### Defined in + +[packages/sdk/metadata-claims/src/types.ts:17](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/metadata-claims/src/types.ts#L17) + +___ + +### TWITTER + +• **TWITTER** = ``"TWITTER"`` + +#### Defined in + +[packages/sdk/metadata-claims/src/types.ts:18](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/metadata-claims/src/types.ts#L18) diff --git a/docs/sdk/metadata-claims/modules/account.md b/docs/sdk/metadata-claims/modules/account.md new file mode 100644 index 000000000..e08eb69e8 --- /dev/null +++ b/docs/sdk/metadata-claims/modules/account.md @@ -0,0 +1,78 @@ +[@celo/metadata-claims](../README.md) / account + +# Module: account + +## Table of contents + +### Type Aliases + +- [AccountClaim](account.md#accountclaim) + +### Variables + +- [AccountClaimType](account.md#accountclaimtype) +- [AccountClaimTypeH](account.md#accountclaimtypeh) + +### Functions + +- [createAccountClaim](account.md#createaccountclaim) + +## Type Aliases + +### AccountClaim + +Ƭ **AccountClaim**: `t.TypeOf`\ + +#### Defined in + +[packages/sdk/metadata-claims/src/account.ts:35](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/metadata-claims/src/account.ts#L35) + +## Variables + +### AccountClaimType + +• `Const` **AccountClaimType**: `Type`\<\{ `address`: `string` = AddressType; `publicKey`: `undefined` \| `string` ; `timestamp`: `number` = TimestampType; `type`: [`ACCOUNT`](../enums/types.ClaimTypes.md#account) }, `any`, `unknown`\> + +#### Defined in + +[packages/sdk/metadata-claims/src/account.ts:19](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/metadata-claims/src/account.ts#L19) + +___ + +### AccountClaimTypeH + +• `Const` **AccountClaimTypeH**: `TypeC`\<\{ `address`: `Type`\<`string`, `string`, `unknown`\> = AddressType; `publicKey`: `UnionC`\<[`UndefinedC`, `Type`\<`string`, `string`, `unknown`\>]\> ; `timestamp`: `NumberC` = TimestampType; `type`: `LiteralC`\<[`ACCOUNT`](../enums/types.ClaimTypes.md#account)\> }\> + +Provide the type minus the validation that the public key and address are derived from the same private key + +#### Defined in + +[packages/sdk/metadata-claims/src/account.ts:11](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/metadata-claims/src/account.ts#L11) + +## Functions + +### createAccountClaim + +▸ **createAccountClaim**(`address`, `publicKey?`): `Object` + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `address` | `string` | +| `publicKey?` | `string` | + +#### Returns + +`Object` + +| Name | Type | +| :------ | :------ | +| `address` | `string` | +| `publicKey` | `undefined` \| `string` | +| `timestamp` | `number` | +| `type` | [`ACCOUNT`](../enums/types.ClaimTypes.md#account) | + +#### Defined in + +[packages/sdk/metadata-claims/src/account.ts:37](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/metadata-claims/src/account.ts#L37) diff --git a/docs/sdk/metadata-claims/modules/claim.md b/docs/sdk/metadata-claims/modules/claim.md new file mode 100644 index 000000000..8bfc752c4 --- /dev/null +++ b/docs/sdk/metadata-claims/modules/claim.md @@ -0,0 +1,314 @@ +[@celo/metadata-claims](../README.md) / claim + +# Module: claim + +## Table of contents + +### Type Aliases + +- [Claim](claim.md#claim) +- [ClaimPayload](claim.md#claimpayload) +- [DomainClaim](claim.md#domainclaim) +- [KeybaseClaim](claim.md#keybaseclaim) +- [NameClaim](claim.md#nameclaim) +- [StorageClaim](claim.md#storageclaim) + +### Variables + +- [ClaimType](claim.md#claimtype) +- [DOMAIN\_TXT\_HEADER](claim.md#domain_txt_header) +- [KeybaseClaimType](claim.md#keybaseclaimtype) +- [SignedClaimType](claim.md#signedclaimtype) + +### Functions + +- [createDomainClaim](claim.md#createdomainclaim) +- [createNameClaim](claim.md#createnameclaim) +- [createStorageClaim](claim.md#createstorageclaim) +- [hashOfClaim](claim.md#hashofclaim) +- [hashOfClaims](claim.md#hashofclaims) +- [isOfType](claim.md#isoftype) +- [serializeClaim](claim.md#serializeclaim) + +## Type Aliases + +### Claim + +Ƭ **Claim**: [`DomainClaim`](claim.md#domainclaim) \| [`KeybaseClaim`](claim.md#keybaseclaim) \| [`NameClaim`](claim.md#nameclaim) \| [`AccountClaim`](account.md#accountclaim) \| [`StorageClaim`](claim.md#storageclaim) + +#### Defined in + +[packages/sdk/metadata-claims/src/claim.ts:50](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/metadata-claims/src/claim.ts#L50) + +___ + +### ClaimPayload + +Ƭ **ClaimPayload**\<`K`\>: `K` extends typeof [`DOMAIN`](../enums/types.ClaimTypes.md#domain) ? [`DomainClaim`](claim.md#domainclaim) : `K` extends typeof [`NAME`](../enums/types.ClaimTypes.md#name) ? [`NameClaim`](claim.md#nameclaim) : `K` extends typeof [`KEYBASE`](../enums/types.ClaimTypes.md#keybase) ? [`KeybaseClaim`](claim.md#keybaseclaim) : `K` extends typeof [`ACCOUNT`](../enums/types.ClaimTypes.md#account) ? [`AccountClaim`](account.md#accountclaim) : [`StorageClaim`](claim.md#storageclaim) + +#### Type parameters + +| Name | Type | +| :------ | :------ | +| `K` | extends [`ClaimTypes`](../enums/types.ClaimTypes.md) | + +#### Defined in + +[packages/sdk/metadata-claims/src/claim.ts:52](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/metadata-claims/src/claim.ts#L52) + +___ + +### DomainClaim + +Ƭ **DomainClaim**: `t.TypeOf`\ + +#### Defined in + +[packages/sdk/metadata-claims/src/claim.ts:47](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/metadata-claims/src/claim.ts#L47) + +___ + +### KeybaseClaim + +Ƭ **KeybaseClaim**: `t.TypeOf`\ + +#### Defined in + +[packages/sdk/metadata-claims/src/claim.ts:12](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/metadata-claims/src/claim.ts#L12) + +___ + +### NameClaim + +Ƭ **NameClaim**: `t.TypeOf`\ + +#### Defined in + +[packages/sdk/metadata-claims/src/claim.ts:48](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/metadata-claims/src/claim.ts#L48) + +___ + +### StorageClaim + +Ƭ **StorageClaim**: `t.TypeOf`\ + +#### Defined in + +[packages/sdk/metadata-claims/src/claim.ts:49](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/metadata-claims/src/claim.ts#L49) + +## Variables + +### ClaimType + +• `Const` **ClaimType**: `UnionC`\<[`Type`\<\{ `address`: `string` = AddressType; `publicKey`: `undefined` \| `string` ; `timestamp`: `number` = TimestampType; `type`: [`ACCOUNT`](../enums/types.ClaimTypes.md#account) }, `any`, `unknown`\>, `TypeC`\<\{ `domain`: `StringC` = t.string; `timestamp`: `NumberC` = TimestampType; `type`: `LiteralC`\<[`DOMAIN`](../enums/types.ClaimTypes.md#domain)\> }\>, `TypeC`\<\{ `timestamp`: `NumberC` = TimestampType; `type`: `LiteralC`\<[`KEYBASE`](../enums/types.ClaimTypes.md#keybase)\> ; `username`: `StringC` = t.string }\>, `TypeC`\<\{ `name`: `StringC` = t.string; `timestamp`: `NumberC` = TimestampType; `type`: `LiteralC`\<[`NAME`](../enums/types.ClaimTypes.md#name)\> }\>, `TypeC`\<\{ `address`: `StringC` = t.string; `filteredDataPaths`: `StringC` = t.string; `timestamp`: `NumberC` = TimestampType; `type`: `LiteralC`\<[`STORAGE`](../enums/types.ClaimTypes.md#storage)\> }\>]\> + +#### Defined in + +[packages/sdk/metadata-claims/src/claim.ts:33](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/metadata-claims/src/claim.ts#L33) + +___ + +### DOMAIN\_TXT\_HEADER + +• `Const` **DOMAIN\_TXT\_HEADER**: ``"celo-site-verification"`` + +#### Defined in + +[packages/sdk/metadata-claims/src/claim.ts:46](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/metadata-claims/src/claim.ts#L46) + +___ + +### KeybaseClaimType + +• `Const` **KeybaseClaimType**: `TypeC`\<\{ `timestamp`: `NumberC` = TimestampType; `type`: `LiteralC`\<[`KEYBASE`](../enums/types.ClaimTypes.md#keybase)\> ; `username`: `StringC` = t.string }\> + +#### Defined in + +[packages/sdk/metadata-claims/src/claim.ts:6](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/metadata-claims/src/claim.ts#L6) + +___ + +### SignedClaimType + +• `Const` **SignedClaimType**: `TypeC`\<\{ `claim`: `UnionC`\<[`Type`\<\{ `address`: `string` = AddressType; `publicKey`: `undefined` \| `string` ; `timestamp`: `number` = TimestampType; `type`: [`ACCOUNT`](../enums/types.ClaimTypes.md#account) }, `any`, `unknown`\>, `TypeC`\<\{ `domain`: `StringC` = t.string; `timestamp`: `NumberC` = TimestampType; `type`: `LiteralC`\<[`DOMAIN`](../enums/types.ClaimTypes.md#domain)\> }\>, `TypeC`\<\{ `timestamp`: `NumberC` = TimestampType; `type`: `LiteralC`\<[`KEYBASE`](../enums/types.ClaimTypes.md#keybase)\> ; `username`: `StringC` = t.string }\>, `TypeC`\<\{ `name`: `StringC` = t.string; `timestamp`: `NumberC` = TimestampType; `type`: `LiteralC`\<[`NAME`](../enums/types.ClaimTypes.md#name)\> }\>, `TypeC`\<\{ `address`: `StringC` = t.string; `filteredDataPaths`: `StringC` = t.string; `timestamp`: `NumberC` = TimestampType; `type`: `LiteralC`\<[`STORAGE`](../enums/types.ClaimTypes.md#storage)\> }\>]\> = ClaimType; `signature`: `StringC` = SignatureType }\> + +#### Defined in + +[packages/sdk/metadata-claims/src/claim.ts:41](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/metadata-claims/src/claim.ts#L41) + +## Functions + +### createDomainClaim + +▸ **createDomainClaim**(`domain`): `Object` + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `domain` | `string` | + +#### Returns + +`Object` + +| Name | Type | +| :------ | :------ | +| `domain` | `string` | +| `timestamp` | `number` | +| `type` | [`DOMAIN`](../enums/types.ClaimTypes.md#domain) | + +#### Defined in + +[packages/sdk/metadata-claims/src/claim.ts:87](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/metadata-claims/src/claim.ts#L87) + +___ + +### createNameClaim + +▸ **createNameClaim**(`name`): `Object` + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `name` | `string` | + +#### Returns + +`Object` + +| Name | Type | +| :------ | :------ | +| `name` | `string` | +| `timestamp` | `number` | +| `type` | [`NAME`](../enums/types.ClaimTypes.md#name) | + +#### Defined in + +[packages/sdk/metadata-claims/src/claim.ts:81](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/metadata-claims/src/claim.ts#L81) + +___ + +### createStorageClaim + +▸ **createStorageClaim**(`storageURL`): `Object` + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `storageURL` | `string` | + +#### Returns + +`Object` + +| Name | Type | +| :------ | :------ | +| `address` | `string` | +| `filteredDataPaths` | `string` | +| `timestamp` | `number` | +| `type` | [`STORAGE`](../enums/types.ClaimTypes.md#storage) | + +#### Defined in + +[packages/sdk/metadata-claims/src/claim.ts:93](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/metadata-claims/src/claim.ts#L93) + +___ + +### hashOfClaim + +▸ **hashOfClaim**(`claim`): `string` + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `claim` | [`Claim`](claim.md#claim) | + +#### Returns + +`string` + +#### Defined in + +[packages/sdk/metadata-claims/src/claim.ts:68](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/metadata-claims/src/claim.ts#L68) + +___ + +### hashOfClaims + +▸ **hashOfClaims**(`claims`): `string` + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `claims` | [`Claim`](claim.md#claim)[] | + +#### Returns + +`string` + +#### Defined in + +[packages/sdk/metadata-claims/src/claim.ts:72](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/metadata-claims/src/claim.ts#L72) + +___ + +### isOfType + +▸ **isOfType**\<`K`\>(`type`): (`data`: [`Claim`](claim.md#claim)) => data is ClaimPayload\ + +#### Type parameters + +| Name | Type | +| :------ | :------ | +| `K` | extends [`ClaimTypes`](../enums/types.ClaimTypes.md) | + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `type` | `K` | + +#### Returns + +`fn` + +▸ (`data`): data is ClaimPayload\ + +##### Parameters + +| Name | Type | +| :------ | :------ | +| `data` | [`Claim`](claim.md#claim) | + +##### Returns + +data is ClaimPayload\ + +#### Defined in + +[packages/sdk/metadata-claims/src/claim.ts:64](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/metadata-claims/src/claim.ts#L64) + +___ + +### serializeClaim + +▸ **serializeClaim**(`claim`): `string` + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `claim` | [`Claim`](claim.md#claim) | + +#### Returns + +`string` + +#### Defined in + +[packages/sdk/metadata-claims/src/claim.ts:77](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/metadata-claims/src/claim.ts#L77) diff --git a/docs/sdk/metadata-claims/modules/index.md b/docs/sdk/metadata-claims/modules/index.md new file mode 100644 index 000000000..022ba1206 --- /dev/null +++ b/docs/sdk/metadata-claims/modules/index.md @@ -0,0 +1,50 @@ +[@celo/metadata-claims](../README.md) / index + +# Module: index + +## Table of contents + +### References + +- [Claim](index.md#claim) +- [ClaimTypes](index.md#claimtypes) +- [IdentityMetadata](index.md#identitymetadata) +- [IdentityMetadataType](index.md#identitymetadatatype) +- [IdentityMetadataWrapper](index.md#identitymetadatawrapper) +- [createNameClaim](index.md#createnameclaim) + +## References + +### Claim + +Re-exports [Claim](claim.md#claim) + +___ + +### ClaimTypes + +Re-exports [ClaimTypes](../enums/types.ClaimTypes.md) + +___ + +### IdentityMetadata + +Re-exports [IdentityMetadata](metadata.md#identitymetadata) + +___ + +### IdentityMetadataType + +Re-exports [IdentityMetadataType](metadata.md#identitymetadatatype) + +___ + +### IdentityMetadataWrapper + +Re-exports [IdentityMetadataWrapper](../classes/metadata.IdentityMetadataWrapper.md) + +___ + +### createNameClaim + +Re-exports [createNameClaim](claim.md#createnameclaim) diff --git a/docs/sdk/metadata-claims/modules/keybase.md b/docs/sdk/metadata-claims/modules/keybase.md new file mode 100644 index 000000000..c6c937f61 --- /dev/null +++ b/docs/sdk/metadata-claims/modules/keybase.md @@ -0,0 +1,125 @@ +[@celo/metadata-claims](../README.md) / keybase + +# Module: keybase + +## Table of contents + +### Variables + +- [keybaseFilePathToProof](keybase.md#keybasefilepathtoproof) + +### Functions + +- [createKeybaseClaim](keybase.md#createkeybaseclaim) +- [proofFileName](keybase.md#prooffilename) +- [targetURL](keybase.md#targeturl) +- [verifyKeybaseClaim](keybase.md#verifykeybaseclaim) + +## Variables + +### keybaseFilePathToProof + +• `Const` **keybaseFilePathToProof**: ``".well-known/celo/"`` + +#### Defined in + +[packages/sdk/metadata-claims/src/keybase.ts:8](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/metadata-claims/src/keybase.ts#L8) + +## Functions + +### createKeybaseClaim + +▸ **createKeybaseClaim**(`username`): `Object` + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `username` | `string` | + +#### Returns + +`Object` + +| Name | Type | +| :------ | :------ | +| `timestamp` | `number` | +| `type` | [`KEYBASE`](../enums/types.ClaimTypes.md#keybase) | +| `username` | `string` | + +#### Defined in + +[packages/sdk/metadata-claims/src/keybase.ts:71](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/metadata-claims/src/keybase.ts#L71) + +___ + +### proofFileName + +▸ **proofFileName**(`address`): `string` + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `address` | `string` | + +#### Returns + +`string` + +#### Defined in + +[packages/sdk/metadata-claims/src/keybase.ts:9](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/metadata-claims/src/keybase.ts#L9) + +___ + +### targetURL + +▸ **targetURL**(`username`, `address`): `string` + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `username` | `string` | +| `address` | `string` | + +#### Returns + +`string` + +#### Defined in + +[packages/sdk/metadata-claims/src/keybase.ts:10](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/metadata-claims/src/keybase.ts#L10) + +___ + +### verifyKeybaseClaim + +▸ **verifyKeybaseClaim**(`accountsInfoGetters`, `claim`, `signer`): `Promise`\<`string` \| `undefined`\> + +#### Parameters + +| Name | Type | Default value | +| :------ | :------ | :------ | +| `accountsInfoGetters` | [`AccountMetadataSignerGetters`](types.md#accountmetadatasignergetters) | `undefined` | +| `claim` | `Object` | `undefined` | +| `claim.timestamp` | `number` | `TimestampType` | +| `claim.type` | [`KEYBASE`](../enums/types.ClaimTypes.md#keybase) | `undefined` | +| `claim.username` | `string` | `t.string` | +| `signer` | `string` | `undefined` | + +#### Returns + +`Promise`\<`string` \| `undefined`\> + +a human readable string with claims (non)verifiability or undefined + +**`Remarks`** + +If verification encounters an error, returns the error message as a string +otherwise returns undefined when successful + +#### Defined in + +[packages/sdk/metadata-claims/src/keybase.ts:25](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/metadata-claims/src/keybase.ts#L25) diff --git a/docs/sdk/metadata-claims/modules/metadata.md b/docs/sdk/metadata-claims/modules/metadata.md new file mode 100644 index 000000000..4a3f6d765 --- /dev/null +++ b/docs/sdk/metadata-claims/modules/metadata.md @@ -0,0 +1,47 @@ +[@celo/metadata-claims](../README.md) / metadata + +# Module: metadata + +## Table of contents + +### References + +- [ClaimTypes](metadata.md#claimtypes) + +### Classes + +- [IdentityMetadataWrapper](../classes/metadata.IdentityMetadataWrapper.md) + +### Type Aliases + +- [IdentityMetadata](metadata.md#identitymetadata) + +### Variables + +- [IdentityMetadataType](metadata.md#identitymetadatatype) + +## References + +### ClaimTypes + +Re-exports [ClaimTypes](../enums/types.ClaimTypes.md) + +## Type Aliases + +### IdentityMetadata + +Ƭ **IdentityMetadata**: `t.TypeOf`\ + +#### Defined in + +[packages/sdk/metadata-claims/src/metadata.ts:32](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/metadata-claims/src/metadata.ts#L32) + +## Variables + +### IdentityMetadataType + +• `Const` **IdentityMetadataType**: `TypeC`\<\{ `claims`: `ArrayC`\<`UnionC`\<[`Type`\<\{ `address`: `string` = AddressType; `publicKey`: `undefined` \| `string` ; `timestamp`: `number` = TimestampType; `type`: [`ACCOUNT`](../enums/types.ClaimTypes.md#account) }, `any`, `unknown`\>, `TypeC`\<\{ `domain`: `StringC` = t.string; `timestamp`: `NumberC` = TimestampType; `type`: `LiteralC`\<[`DOMAIN`](../enums/types.ClaimTypes.md#domain)\> }\>, `TypeC`\<\{ `timestamp`: `NumberC` = TimestampType; `type`: `LiteralC`\<[`KEYBASE`](../enums/types.ClaimTypes.md#keybase)\> ; `username`: `StringC` = t.string }\>, `TypeC`\<\{ `name`: `StringC` = t.string; `timestamp`: `NumberC` = TimestampType; `type`: `LiteralC`\<[`NAME`](../enums/types.ClaimTypes.md#name)\> }\>, `TypeC`\<\{ `address`: `StringC` = t.string; `filteredDataPaths`: `StringC` = t.string; `timestamp`: `NumberC` = TimestampType; `type`: `LiteralC`\<[`STORAGE`](../enums/types.ClaimTypes.md#storage)\> }\>]\>\> ; `meta`: `TypeC`\<\{ `address`: `Type`\<`string`, `string`, `unknown`\> = AddressType; `signature`: `StringC` = SignatureType }\> = MetaType }\> + +#### Defined in + +[packages/sdk/metadata-claims/src/metadata.ts:27](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/metadata-claims/src/metadata.ts#L27) diff --git a/docs/sdk/metadata-claims/modules/types.md b/docs/sdk/metadata-claims/modules/types.md new file mode 100644 index 000000000..18e4607ff --- /dev/null +++ b/docs/sdk/metadata-claims/modules/types.md @@ -0,0 +1,108 @@ +[@celo/metadata-claims](../README.md) / types + +# Module: types + +## Table of contents + +### Enumerations + +- [ClaimTypes](../enums/types.ClaimTypes.md) + +### Type Aliases + +- [AccountMetadataSignerGetters](types.md#accountmetadatasignergetters) +- [AccountSignerGetters](types.md#accountsignergetters) + +### Variables + +- [SINGULAR\_CLAIM\_TYPES](types.md#singular_claim_types) +- [SignatureType](types.md#signaturetype) +- [TimestampType](types.md#timestamptype) +- [VERIFIABLE\_CLAIM\_TYPES](types.md#verifiable_claim_types) + +### Functions + +- [now](types.md#now) + +## Type Aliases + +### AccountMetadataSignerGetters + +Ƭ **AccountMetadataSignerGetters**: \{ `getMetadataURL`: (`address`: `string`) => `Promise`\<`string`\> } & [`AccountSignerGetters`](types.md#accountsignergetters) + +#### Defined in + +[packages/sdk/metadata-claims/src/types.ts:31](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/metadata-claims/src/types.ts#L31) + +___ + +### AccountSignerGetters + +Ƭ **AccountSignerGetters**: `Object` + +#### Type declaration + +| Name | Type | +| :------ | :------ | +| `getAttestationSigner` | (`address`: `Address`) => `Promise`\<`StrongAddress`\> | +| `getValidatorSigner` | (`address`: `Address`) => `Promise`\<`StrongAddress`\> | +| `getVoteSigner` | (`address`: `Address`) => `Promise`\<`StrongAddress`\> | +| `isAccount` | (`address`: `Address`) => `Promise`\<`boolean`\> | + +#### Defined in + +[packages/sdk/metadata-claims/src/types.ts:24](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/metadata-claims/src/types.ts#L24) + +## Variables + +### SINGULAR\_CLAIM\_TYPES + +• `Const` **SINGULAR\_CLAIM\_TYPES**: [`ClaimTypes`](../enums/types.ClaimTypes.md)[] + +#### Defined in + +[packages/sdk/metadata-claims/src/types.ts:22](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/metadata-claims/src/types.ts#L22) + +___ + +### SignatureType + +• `Const` **SignatureType**: `StringC` = `t.string` + +#### Defined in + +[packages/sdk/metadata-claims/src/types.ts:5](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/metadata-claims/src/types.ts#L5) + +___ + +### TimestampType + +• `Const` **TimestampType**: `NumberC` = `t.number` + +#### Defined in + +[packages/sdk/metadata-claims/src/types.ts:6](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/metadata-claims/src/types.ts#L6) + +___ + +### VERIFIABLE\_CLAIM\_TYPES + +• `Const` **VERIFIABLE\_CLAIM\_TYPES**: [`ClaimTypes`](../enums/types.ClaimTypes.md)[] + +#### Defined in + +[packages/sdk/metadata-claims/src/types.ts:21](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/metadata-claims/src/types.ts#L21) + +## Functions + +### now + +▸ **now**(): `number` + +#### Returns + +`number` + +#### Defined in + +[packages/sdk/metadata-claims/src/types.ts:9](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/metadata-claims/src/types.ts#L9) diff --git a/docs/sdk/metadata-claims/modules/verify.md b/docs/sdk/metadata-claims/modules/verify.md new file mode 100644 index 000000000..e4d45ece3 --- /dev/null +++ b/docs/sdk/metadata-claims/modules/verify.md @@ -0,0 +1,94 @@ +[@celo/metadata-claims](../README.md) / verify + +# Module: verify + +## Table of contents + +### Functions + +- [verifyAccountClaim](verify.md#verifyaccountclaim) +- [verifyClaim](verify.md#verifyclaim) +- [verifyDomainRecord](verify.md#verifydomainrecord) + +## Functions + +### verifyAccountClaim + +▸ **verifyAccountClaim**(`accountMeta`, `claim`, `address`, `tries?`): `Promise`\<`undefined` \| `string`\> + +#### Parameters + +| Name | Type | Default value | +| :------ | :------ | :------ | +| `accountMeta` | [`AccountMetadataSignerGetters`](types.md#accountmetadatasignergetters) | `undefined` | +| `claim` | `Object` | `undefined` | +| `claim.address` | `string` | `AddressType` | +| `claim.publicKey` | `undefined` \| `string` | `undefined` | +| `claim.timestamp` | `number` | `TimestampType` | +| `claim.type` | [`ACCOUNT`](../enums/types.ClaimTypes.md#account) | `undefined` | +| `address` | `string` | `undefined` | +| `tries` | `number` | `3` | + +#### Returns + +`Promise`\<`undefined` \| `string`\> + +#### Defined in + +[packages/sdk/metadata-claims/src/verify.ts:37](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/metadata-claims/src/verify.ts#L37) + +___ + +### verifyClaim + +▸ **verifyClaim**(`accountMeta`, `claim`, `address`, `tries?`): `Promise`\<`undefined` \| `string`\> + +Verifies a claim made by an account, i.e. whether a claim can be verified to be correct + +#### Parameters + +| Name | Type | Default value | Description | +| :------ | :------ | :------ | :------ | +| `accountMeta` | [`AccountMetadataSignerGetters`](types.md#accountmetadatasignergetters) | `undefined` | - | +| `claim` | [`Claim`](claim.md#claim) | `undefined` | The claim to verify | +| `address` | `string` | `undefined` | The address that is making the claim | +| `tries` | `number` | `3` | - | + +#### Returns + +`Promise`\<`undefined` \| `string`\> + +If valid, returns undefined. If invalid or unable to verify, returns a string with the error + +#### Defined in + +[packages/sdk/metadata-claims/src/verify.ts:18](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/metadata-claims/src/verify.ts#L18) + +___ + +### verifyDomainRecord + +▸ **verifyDomainRecord**(`accountMeta`, `claim`, `address`, `dnsResolver?`): `Promise`\<`undefined` \| `string`\> + +It verifies if a DNS domain includes in the TXT records an entry with name +`celo-site-verification` and a valid signature in base64 + +#### Parameters + +| Name | Type | Default value | +| :------ | :------ | :------ | +| `accountMeta` | [`AccountMetadataSignerGetters`](types.md#accountmetadatasignergetters) | `undefined` | +| `claim` | `Object` | `undefined` | +| `claim.domain` | `string` | `t.string` | +| `claim.timestamp` | `number` | `TimestampType` | +| `claim.type` | [`DOMAIN`](../enums/types.ClaimTypes.md#domain) | `undefined` | +| `address` | `string` | `undefined` | +| `dnsResolver` | `dnsResolverFunction` | `undefined` | + +#### Returns + +`Promise`\<`undefined` \| `string`\> + +#### Defined in + +[packages/sdk/metadata-claims/src/verify.ts:76](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/metadata-claims/src/verify.ts#L76) diff --git a/packages/cli/package.json b/packages/cli/package.json index 0aa0f82e7..03c41a2b4 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -46,6 +46,7 @@ "@celo/explorer": "^5.0.12", "@celo/governance": "^5.1.3", "@celo/identity": "^5.1.2", + "@celo/metadata-claims": "^0.0.1", "@celo/phone-utils": "^6.0.3", "@celo/utils": "^7.0.0", "@celo/wallet-hsm-azure": "^6.0.1", diff --git a/packages/cli/src/commands/account/claim-account.ts b/packages/cli/src/commands/account/claim-account.ts index af67004ed..a02bea790 100644 --- a/packages/cli/src/commands/account/claim-account.ts +++ b/packages/cli/src/commands/account/claim-account.ts @@ -1,4 +1,4 @@ -import { createAccountClaim } from '@celo/contractkit/lib/identity/claims/account' +import { createAccountClaim } from '@celo/metadata-claims/lib/account' import { Flags } from '@oclif/core' import { ClaimCommand } from '../../utils/identity' diff --git a/packages/cli/src/commands/account/claim-domain.ts b/packages/cli/src/commands/account/claim-domain.ts index 78098db38..5bc845a11 100644 --- a/packages/cli/src/commands/account/claim-domain.ts +++ b/packages/cli/src/commands/account/claim-domain.ts @@ -1,4 +1,4 @@ -import { createDomainClaim, serializeClaim } from '@celo/contractkit/lib/identity/claims/claim' +import { createDomainClaim, serializeClaim } from '@celo/metadata-claims/lib/claim' import { Flags } from '@oclif/core' import { ClaimCommand } from '../../utils/identity' export default class ClaimDomain extends ClaimCommand { diff --git a/packages/cli/src/commands/account/claim-keybase.ts b/packages/cli/src/commands/account/claim-keybase.ts index d49c8696c..6b1ec7aca 100644 --- a/packages/cli/src/commands/account/claim-keybase.ts +++ b/packages/cli/src/commands/account/claim-keybase.ts @@ -1,11 +1,11 @@ -import { hashOfClaim, KeybaseClaim } from '@celo/contractkit/lib/identity/claims/claim' +import { hashOfClaim, KeybaseClaim } from '@celo/metadata-claims/lib/claim' import { createKeybaseClaim, keybaseFilePathToProof, proofFileName, targetURL, verifyKeybaseClaim, -} from '@celo/contractkit/lib/identity/claims/keybase' +} from '@celo/metadata-claims/lib/keybase' import { sleep } from '@celo/utils/lib/async' import { toChecksumAddress } from '@ethereumjs/util' @@ -14,7 +14,7 @@ import { writeFileSync } from 'fs' import { tmpdir } from 'os' import { binaryPrompt } from '../../utils/cli' import { commandExists, execCmdWithError, execWith0Exit } from '../../utils/exec' -import { ClaimCommand } from '../../utils/identity' +import { ClaimCommand, kitToAccountMetaSigners } from '../../utils/identity' export default class ClaimKeybase extends ClaimCommand { static description = 'Claim a keybase username and add the claim to a local metadata file' static flags = { @@ -73,7 +73,8 @@ export default class ClaimKeybase extends ClaimCommand { // Wait for changes to propagate await sleep(3000) const kit = await this.getKit() - const verificationError = await verifyKeybaseClaim(kit, claim, address) + const accountsInfoGetters = await kitToAccountMetaSigners(kit) + const verificationError = await verifyKeybaseClaim(accountsInfoGetters, claim, address) if (verificationError) { throw new Error(`Claim is not verifiable: ${verificationError}`) } diff --git a/packages/cli/src/commands/account/claim-name.ts b/packages/cli/src/commands/account/claim-name.ts index b6f8c6f27..9b4f040a5 100644 --- a/packages/cli/src/commands/account/claim-name.ts +++ b/packages/cli/src/commands/account/claim-name.ts @@ -1,4 +1,4 @@ -import { createNameClaim } from '@celo/contractkit/lib/identity/claims/claim' +import { createNameClaim } from '@celo/metadata-claims' import { Flags } from '@oclif/core' import { ClaimCommand } from '../../utils/identity' export default class ClaimName extends ClaimCommand { diff --git a/packages/cli/src/commands/account/claim-storage.ts b/packages/cli/src/commands/account/claim-storage.ts index 32fcffcf0..e2587ba46 100644 --- a/packages/cli/src/commands/account/claim-storage.ts +++ b/packages/cli/src/commands/account/claim-storage.ts @@ -1,4 +1,4 @@ -import { createStorageClaim } from '@celo/contractkit/lib/identity/claims/claim' +import { createStorageClaim } from '@celo/metadata-claims/lib/claim' import { CustomFlags } from '../../utils/command' import { ClaimCommand } from '../../utils/identity' export default class ClaimStorage extends ClaimCommand { diff --git a/packages/cli/src/commands/account/claims.test.ts b/packages/cli/src/commands/account/claims.test.ts index 514ff4dca..212ee31d2 100644 --- a/packages/cli/src/commands/account/claims.test.ts +++ b/packages/cli/src/commands/account/claims.test.ts @@ -1,6 +1,6 @@ -import { ContractKit, IdentityMetadataWrapper, newKitFromWeb3 } from '@celo/contractkit' -import { ClaimTypes } from '@celo/contractkit/lib/identity' +import { ContractKit, newKitFromWeb3 } from '@celo/contractkit' import { testWithAnvilL1 } from '@celo/dev-utils/lib/anvil-test' +import { ClaimTypes, IdentityMetadataWrapper } from '@celo/metadata-claims' import { readFileSync, writeFileSync } from 'fs' import { tmpdir } from 'os' import Web3 from 'web3' diff --git a/packages/cli/src/commands/account/create-metadata.ts b/packages/cli/src/commands/account/create-metadata.ts index 9c0fc73c7..0a8cdaefd 100644 --- a/packages/cli/src/commands/account/create-metadata.ts +++ b/packages/cli/src/commands/account/create-metadata.ts @@ -1,4 +1,4 @@ -import { IdentityMetadataWrapper } from '@celo/contractkit' +import { IdentityMetadataWrapper } from '@celo/metadata-claims' import { writeFileSync } from 'fs' import { CustomArgs } from '../../utils/command' import { ClaimCommand } from '../../utils/identity' diff --git a/packages/cli/src/commands/account/get-metadata.ts b/packages/cli/src/commands/account/get-metadata.ts index 8a7c1f597..ee8c0d43d 100644 --- a/packages/cli/src/commands/account/get-metadata.ts +++ b/packages/cli/src/commands/account/get-metadata.ts @@ -1,4 +1,4 @@ -import { IdentityMetadataWrapper } from '@celo/contractkit' +import { IdentityMetadataWrapper } from '@celo/metadata-claims' import { ux } from '@oclif/core' import { BaseCommand } from '../../base' diff --git a/packages/cli/src/commands/account/register-metadata.ts b/packages/cli/src/commands/account/register-metadata.ts index e884b52c6..35c1340b4 100644 --- a/packages/cli/src/commands/account/register-metadata.ts +++ b/packages/cli/src/commands/account/register-metadata.ts @@ -1,4 +1,4 @@ -import { IdentityMetadataWrapper } from '@celo/contractkit' +import { IdentityMetadataWrapper } from '@celo/metadata-claims' import { Flags, ux } from '@oclif/core' import { BaseCommand } from '../../base' diff --git a/packages/cli/src/commands/account/show-claimed-accounts.ts b/packages/cli/src/commands/account/show-claimed-accounts.ts index c33c4220b..5d6e6673b 100644 --- a/packages/cli/src/commands/account/show-claimed-accounts.ts +++ b/packages/cli/src/commands/account/show-claimed-accounts.ts @@ -1,12 +1,13 @@ -import { ContractKit, IdentityMetadataWrapper } from '@celo/contractkit' -import { ClaimTypes } from '@celo/contractkit/lib/identity' -import { AccountClaim } from '@celo/contractkit/lib/identity/claims/account' -import { verifyAccountClaim } from '@celo/contractkit/lib/identity/claims/verify' +import { ContractKit } from '@celo/contractkit' +import { ClaimTypes, IdentityMetadataWrapper } from '@celo/metadata-claims' +import { AccountClaim } from '@celo/metadata-claims/lib/account' +import { verifyAccountClaim } from '@celo/metadata-claims/lib/verify' import { ensureLeading0x } from '@celo/utils/lib/address' import { notEmpty } from '@celo/utils/lib/collections' import { BaseCommand } from '../../base' import { printValueMap } from '../../utils/cli' import { CustomArgs } from '../../utils/command' +import { kitToAccountMetaSigners } from '../../utils/identity' async function getMetadata(kit: ContractKit, address: string) { const accounts = await kit.contracts.getAccounts() @@ -26,8 +27,10 @@ async function getClaims( address: string, data: IdentityMetadataWrapper ): Promise { + const accountsInfoGetters = await kitToAccountMetaSigners(kit) + const getClaim = async (claim: AccountClaim) => { - const error = await verifyAccountClaim(kit, claim, ensureLeading0x(address)) + const error = await verifyAccountClaim(accountsInfoGetters, claim, ensureLeading0x(address)) return error ? null : claim.address.toLowerCase() } const res = (await Promise.all(data.filterClaims(ClaimTypes.ACCOUNT).map(getClaim))).filter( diff --git a/packages/cli/src/commands/account/show-metadata.ts b/packages/cli/src/commands/account/show-metadata.ts index aceeb2285..baf7da3b9 100644 --- a/packages/cli/src/commands/account/show-metadata.ts +++ b/packages/cli/src/commands/account/show-metadata.ts @@ -1,4 +1,4 @@ -import { IdentityMetadataWrapper } from '@celo/contractkit' +import { IdentityMetadataWrapper } from '@celo/metadata-claims' import { ux } from '@oclif/core' import { BaseCommand } from '../../base' diff --git a/packages/cli/src/utils/identity.ts b/packages/cli/src/utils/identity.ts index e86e85c44..e03a77d12 100644 --- a/packages/cli/src/utils/identity.ts +++ b/packages/cli/src/utils/identity.ts @@ -1,8 +1,12 @@ import { ContractKit } from '@celo/contractkit' -import { ClaimTypes, IdentityMetadataWrapper } from '@celo/contractkit/lib/identity' -import { Claim } from '@celo/contractkit/lib/identity/claims/claim' -import { now, VERIFIABLE_CLAIM_TYPES } from '@celo/contractkit/lib/identity/claims/types' -import { verifyClaim } from '@celo/contractkit/lib/identity/claims/verify' +import { ClaimTypes, IdentityMetadataWrapper } from '@celo/metadata-claims' +import { Claim } from '@celo/metadata-claims/lib/claim' +import { + AccountMetadataSignerGetters, + now, + VERIFIABLE_CLAIM_TYPES, +} from '@celo/metadata-claims/lib/types' +import { verifyClaim } from '@celo/metadata-claims/lib/verify' import { eqAddress } from '@celo/utils/lib/address' import { concurrentMap } from '@celo/utils/lib/async' import { NativeSigner } from '@celo/utils/lib/signatureUtils' @@ -104,14 +108,31 @@ const fromNow = (timeInSeconds: number) => { return `${humanizeDuration((now() - timeInSeconds) * 1000)} ago` } +export async function kitToAccountMetaSigners( + kit: ContractKit +): Promise { + const accountsWrapper = await kit.contracts.getAccounts() + + return { + isAccount: (address) => accountsWrapper.isAccount(address), + getMetadataURL: (address) => accountsWrapper.getMetadataURL(address) as Promise, + getVoteSigner: (address) => accountsWrapper.getVoteSigner(address), + getValidatorSigner: (address) => accountsWrapper.getValidatorSigner(address), + getAttestationSigner: (address) => accountsWrapper.getAttestationSigner(address), + } +} + export const displayMetadata = async ( metadata: IdentityMetadataWrapper, kit: ContractKit, tableFlags: object = {} ) => { + const accountsInfoGetters = await kitToAccountMetaSigners(kit) const data = await concurrentMap(5, metadata.claims, async (claim) => { const verifiable = VERIFIABLE_CLAIM_TYPES.includes(claim.type) - const status = verifiable ? await verifyClaim(kit, claim, metadata.data.meta.address) : 'N/A' + const status = verifiable + ? await verifyClaim(accountsInfoGetters, claim, metadata.data.meta.address) + : 'N/A' let extra = '' switch (claim.type) { case ClaimTypes.DOMAIN: diff --git a/packages/sdk/contractkit/package.json b/packages/sdk/contractkit/package.json index 88626d89d..d6583f07d 100644 --- a/packages/sdk/contractkit/package.json +++ b/packages/sdk/contractkit/package.json @@ -35,10 +35,8 @@ "@types/bn.js": "^5.1.0", "@types/debug": "^4.1.5", "bignumber.js": "^9.0.0", - "cross-fetch": "3.1.5", "debug": "^4.1.1", "fp-ts": "2.1.1", - "io-ts": "2.0.1", "semver": "^7.3.5", "web3": "1.10.4", "web3-core-helpers": "1.10.4" @@ -52,6 +50,7 @@ "@types/debug": "^4.1.5", "@types/node": "18.7.16", "bn.js": "^5.1.0", + "cross-fetch": "3.1.5", "fetch-mock": "^10.0.7", "ganache": "npm:@celo/ganache@7.8.0-unofficial.0", "jest": "^29.7.0", diff --git a/packages/sdk/contractkit/src/identity/index.ts b/packages/sdk/contractkit/src/identity/index.ts deleted file mode 100644 index 140216404..000000000 --- a/packages/sdk/contractkit/src/identity/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './metadata' diff --git a/packages/sdk/contractkit/src/index.ts b/packages/sdk/contractkit/src/index.ts index 2d650761c..36785b180 100644 --- a/packages/sdk/contractkit/src/index.ts +++ b/packages/sdk/contractkit/src/index.ts @@ -7,7 +7,6 @@ export { CeloTokenContract, RegisteredContracts, } from './base' -export { CeloTokens, CeloTokenType, StableToken, Token } from './celo-tokens' -export { IdentityMetadataWrapper } from './identity' +export { CeloTokenType, CeloTokens, StableToken, Token } from './celo-tokens' export * from './kit' export * from './proxy' diff --git a/packages/sdk/metadata-claims/.eslintrc.js b/packages/sdk/metadata-claims/.eslintrc.js new file mode 100644 index 000000000..cce34ed29 --- /dev/null +++ b/packages/sdk/metadata-claims/.eslintrc.js @@ -0,0 +1,3 @@ +module.exports = { + extends: '../../../.eslintrc.js', +} diff --git a/packages/sdk/metadata-claims/README.md b/packages/sdk/metadata-claims/README.md new file mode 100644 index 000000000..bcdf1f75d --- /dev/null +++ b/packages/sdk/metadata-claims/README.md @@ -0,0 +1 @@ +# metadata-claims diff --git a/packages/sdk/metadata-claims/eslint.tsconfig.json b/packages/sdk/metadata-claims/eslint.tsconfig.json new file mode 100644 index 000000000..a8d4317b4 --- /dev/null +++ b/packages/sdk/metadata-claims/eslint.tsconfig.json @@ -0,0 +1,4 @@ +{ + "extends": "./tsconfig.json", + "exclude": [] +} diff --git a/packages/sdk/metadata-claims/jest.config.js b/packages/sdk/metadata-claims/jest.config.js new file mode 100644 index 000000000..cee088217 --- /dev/null +++ b/packages/sdk/metadata-claims/jest.config.js @@ -0,0 +1,8 @@ +module.exports = { + preset: 'ts-jest', + testMatch: ['/src/**/?(*.)test.ts'], + setupFilesAfterEnv: ['@celo/dev-utils/lib/matchers', '/jestSetup.ts'], + // globalSetup: '/src/test-utils/setup.global.ts', + // globalTeardown: '/src/test-utils/teardown.global.ts', + verbose: true, +} diff --git a/packages/sdk/metadata-claims/jestSetup.ts b/packages/sdk/metadata-claims/jestSetup.ts new file mode 100644 index 000000000..69170cbb3 --- /dev/null +++ b/packages/sdk/metadata-claims/jestSetup.ts @@ -0,0 +1,12 @@ +import { URL } from 'node:url' +// @ts-ignore +global.URL = URL + +// @ts-ignore +const fetchMock = require('fetch-mock') + +const fetchMockSandbox = fetchMock.sandbox() +jest.mock('cross-fetch', () => fetchMockSandbox) + +// @ts-ignore +global.fetchMock = fetchMockSandbox diff --git a/packages/sdk/metadata-claims/package.json b/packages/sdk/metadata-claims/package.json new file mode 100644 index 000000000..2b707ca9c --- /dev/null +++ b/packages/sdk/metadata-claims/package.json @@ -0,0 +1,46 @@ +{ + "name": "@celo/metadata-claims", + "version": "0.0.1", + "author": "cLabs", + "license": "Apache-2.0", + "repository": "https://github.com/celo-org/developer-tooling/tree/master/packages/sdk/metadata-claims", + "keywords": [ + "celo", + "identity", + "metadata", + "claims", + "identifiers" + ], + "main": "./lib/index.js", + "types": "./lib/index.d.ts", + "sideEffects": false, + "scripts": { + "build": "yarn tsc -b .", + "clean": "rm -rf lib ; yarn run tsc -b . --clean", + "prepublishOnly": "yarn build", + "docs": "yarn run --top-level typedoc", + "test": "NODE_OPTIONS=--experimental-vm-modules yarn run --top-level jest --runInBand --forceExit", + "test-anvil": "RUN_GANACHE_TESTS=false RUN_ANVIL_TESTS=true NODE_OPTIONS=--experimental-vm-modules yarn run --top-level jest --forceExit", + "lint": "yarn run --top-level eslint -c .eslintrc.js " + }, + "dependencies": { + "@celo/base": "^6.1.0", + "@celo/utils": "^7.0.0", + "cross-fetch": "3.1.5", + "fp-ts": "2.1.1", + "io-ts": "2.0.1" + }, + "devDependencies": { + "@celo/celo-devchain": "^7.0.0", + "@celo/contractkit": "workspace:^", + "@celo/dev-utils": "0.0.5", + "@celo/odis-identifiers": "^1.0.1", + "@celo/typescript": "workspace:^", + "@types/node": "18.7.6", + "fetch-mock": "^10.0.7", + "jest": "^29.7.0", + "ts-node": "^10.9.1", + "typescript": "5.3.3" + }, + "packageManager": "yarn@4.0.2" +} diff --git a/packages/sdk/contractkit/src/identity/claims/account.test.ts b/packages/sdk/metadata-claims/src/account.test.ts similarity index 81% rename from packages/sdk/contractkit/src/identity/claims/account.test.ts rename to packages/sdk/metadata-claims/src/account.test.ts index 0b204dac8..597cfac0f 100644 --- a/packages/sdk/contractkit/src/identity/claims/account.test.ts +++ b/packages/sdk/metadata-claims/src/account.test.ts @@ -1,11 +1,12 @@ +import { newKitFromWeb3 } from '@celo/contractkit' import { testWithAnvilL1 } from '@celo/dev-utils/lib/anvil-test' import { ACCOUNT_ADDRESSES, ACCOUNT_PRIVATE_KEYS } from '@celo/dev-utils/lib/ganache-setup' import { privateKeyToAddress, privateKeyToPublicKey } from '@celo/utils/lib/address' import { NativeSigner } from '@celo/utils/lib/signatureUtils' -import { newKitFromWeb3 } from '../../kit' -import { IdentityMetadataWrapper } from '../metadata' import { createAccountClaim } from './account' import { Claim } from './claim' +import { IdentityMetadataWrapper } from './metadata' +import { AccountMetadataSignerGetters } from './types' import { verifyClaim } from './verify' testWithAnvilL1('Account claims', (web3) => { @@ -55,6 +56,7 @@ testWithAnvilL1('Account claims', (web3) => { describe('verifying', () => { let claim: Claim let otherMetadata: IdentityMetadataWrapper + let addressInfoGetters: AccountMetadataSignerGetters // Mocking static function calls was too difficult, so manually mocking it const originalFetchFromURLImplementation = IdentityMetadataWrapper.fetchFromURL @@ -74,6 +76,15 @@ testWithAnvilL1('Account claims', (web3) => { const metadata = IdentityMetadataWrapper.fromEmpty(address) claim = createAccountClaim(otherAddress) await metadata.addClaim(claim, NativeSigner(kit.connection.sign, address)) + + const accountsContract = await kit.contracts.getAccounts() + addressInfoGetters = { + isAccount: (address) => accountsContract.isAccount(address), + getMetadataURL: (address) => accountsContract.getMetadataURL(address) as Promise, + getVoteSigner: (address) => accountsContract.getVoteSigner(address), + getValidatorSigner: (address) => accountsContract.getValidatorSigner(address), + getAttestationSigner: (address) => accountsContract.getAttestationSigner(address), + } }) afterEach(() => { @@ -88,14 +99,14 @@ testWithAnvilL1('Account claims', (web3) => { }) it('indicates that the metadata url could not be retrieved', async () => { - const error = await verifyClaim(kit, claim, address) + const error = await verifyClaim(addressInfoGetters, claim, address) expect(error).toContain('could not be retrieved') }) }) describe('when the metadata URL is set, but does not contain the address claim', () => { it('indicates that the metadata does not contain the counter claim', async () => { - const error = await verifyClaim(kit, claim, address) + const error = await verifyClaim(addressInfoGetters, claim, address) expect(error).toContain('did not claim') }) }) @@ -109,7 +120,7 @@ testWithAnvilL1('Account claims', (web3) => { }) it('returns undefined succesfully', async () => { - const error = await verifyClaim(kit, claim, address) + const error = await verifyClaim(addressInfoGetters, claim, address) expect(error).toBeUndefined() }) }) diff --git a/packages/sdk/contractkit/src/identity/claims/account.ts b/packages/sdk/metadata-claims/src/account.ts similarity index 100% rename from packages/sdk/contractkit/src/identity/claims/account.ts rename to packages/sdk/metadata-claims/src/account.ts diff --git a/packages/sdk/contractkit/src/identity/claims/claim.ts b/packages/sdk/metadata-claims/src/claim.ts similarity index 100% rename from packages/sdk/contractkit/src/identity/claims/claim.ts rename to packages/sdk/metadata-claims/src/claim.ts diff --git a/packages/sdk/contractkit/src/identity/claims/domain.test.ts b/packages/sdk/metadata-claims/src/domain.test.ts similarity index 70% rename from packages/sdk/contractkit/src/identity/claims/domain.test.ts rename to packages/sdk/metadata-claims/src/domain.test.ts index 076e703f4..975d27906 100644 --- a/packages/sdk/contractkit/src/identity/claims/domain.test.ts +++ b/packages/sdk/metadata-claims/src/domain.test.ts @@ -1,13 +1,16 @@ +import { NULL_ADDRESS } from '@celo/base' +import { newKitFromWeb3 } from '@celo/contractkit' import { testWithAnvilL1 } from '@celo/dev-utils/lib/anvil-test' import { ACCOUNT_ADDRESSES } from '@celo/dev-utils/lib/ganache-setup' import { NativeSigner, Signer, verifySignature } from '@celo/utils/lib/signatureUtils' -import { newKitFromWeb3 } from '../../kit' -import { IdentityMetadataWrapper } from '../metadata' import { DomainClaim, createDomainClaim, serializeClaim } from './claim' +import { IdentityMetadataWrapper } from './metadata' +import type { AccountMetadataSignerGetters } from './types' import { verifyDomainRecord } from './verify' testWithAnvilL1('Domain claims', (web3) => { const kit = newKitFromWeb3(web3) + const address = ACCOUNT_ADDRESSES[0] const secondAddress = ACCOUNT_ADDRESSES[1] @@ -36,7 +39,6 @@ testWithAnvilL1('Domain claims', (web3) => { ]) }, 100) } - beforeEach(async () => { signer = NativeSigner(kit.connection.sign, address) metadata = IdentityMetadataWrapper.fromEmpty(address) @@ -79,13 +81,31 @@ testWithAnvilL1('Domain claims', (web3) => { }) describe('when the metadata URL is set', () => { + let addressInfoGetters: AccountMetadataSignerGetters = { + isAccount: async (_) => false, + getVoteSigner: async (_) => NULL_ADDRESS, + getValidatorSigner: async (_) => NULL_ADDRESS, + getAttestationSigner: async (_) => NULL_ADDRESS, + getMetadataURL: async (address) => `https://example.com/${address}.json`, + } + + beforeEach(async () => { + const accountsContract = await kit.contracts.getAccounts() + addressInfoGetters = { + isAccount: (address) => accountsContract.isAccount(address), + getMetadataURL: (address) => accountsContract.getMetadataURL(address), + getVoteSigner: (address) => accountsContract.getVoteSigner(address), + getValidatorSigner: (address) => accountsContract.getValidatorSigner(address), + getAttestationSigner: (address) => accountsContract.getAttestationSigner(address), + } + }) it('indicates that the metadata contain the right claim', async () => { - const output = await verifyDomainRecord(kit, claim, address, dnsResolver) + const output = await verifyDomainRecord(addressInfoGetters, claim, address, dnsResolver) expect(output).toBeUndefined() }) it('indicates that the metadata does not contain the proper domain claim', async () => { - const error = await verifyDomainRecord(kit, claim, address) + const error = await verifyDomainRecord(addressInfoGetters, claim, address) expect(error).toContain('Unable to verify domain claim') }) }) diff --git a/packages/sdk/metadata-claims/src/index.ts b/packages/sdk/metadata-claims/src/index.ts new file mode 100644 index 000000000..668469e41 --- /dev/null +++ b/packages/sdk/metadata-claims/src/index.ts @@ -0,0 +1,2 @@ +export { Claim, createNameClaim } from './claim' +export * from './metadata' diff --git a/packages/sdk/contractkit/src/identity/claims/keybase.ts b/packages/sdk/metadata-claims/src/keybase.ts similarity index 89% rename from packages/sdk/contractkit/src/identity/claims/keybase.ts rename to packages/sdk/metadata-claims/src/keybase.ts index 25ed80676..118bf419b 100644 --- a/packages/sdk/contractkit/src/identity/claims/keybase.ts +++ b/packages/sdk/metadata-claims/src/keybase.ts @@ -1,10 +1,9 @@ import { Address } from '@celo/base/lib/address' import fetch from 'cross-fetch' import { isLeft } from 'fp-ts/lib/Either' -import { ContractKit } from '../../kit' -import { IdentityMetadataWrapper } from '../metadata' import { hashOfClaim, KeybaseClaim, KeybaseClaimType, SignedClaimType } from './claim' -import { ClaimTypes, now } from './types' +import { IdentityMetadataWrapper } from './metadata' +import { AccountMetadataSignerGetters, ClaimTypes, now } from './types' export const keybaseFilePathToProof = `.well-known/celo/` export const proofFileName = (address: Address) => `verify-${address}.json` @@ -17,14 +16,14 @@ export const targetURL = (username: string, address: Address) => * If verification encounters an error, returns the error message as a string * otherwise returns undefined when successful * - * @param kit + * @param accountsInfoGetters * @param claim * @param signer * @returns a human readable string with claims (non)verifiability or undefined */ export async function verifyKeybaseClaim( - kit: ContractKit, + accountsInfoGetters: AccountMetadataSignerGetters, claim: KeybaseClaim, signer: Address ): Promise { @@ -44,7 +43,7 @@ export async function verifyKeybaseClaim( } const hasValidSignature = await IdentityMetadataWrapper.verifySignerForAddress( - await kit.contracts.getAccounts(), + accountsInfoGetters, hashOfClaim(parsedClaim.right.claim), parsedClaim.right.signature, signer diff --git a/packages/sdk/contractkit/src/identity/metadata.test.ts b/packages/sdk/metadata-claims/src/metadata.test.ts similarity index 97% rename from packages/sdk/contractkit/src/identity/metadata.test.ts rename to packages/sdk/metadata-claims/src/metadata.test.ts index ff01ba440..0e2c44d16 100644 --- a/packages/sdk/contractkit/src/identity/metadata.test.ts +++ b/packages/sdk/metadata-claims/src/metadata.test.ts @@ -1,9 +1,9 @@ +import { newKitFromWeb3 } from '@celo/contractkit' import { testWithAnvilL1 } from '@celo/dev-utils/lib/anvil-test' import { ACCOUNT_ADDRESSES } from '@celo/dev-utils/lib/ganache-setup' import { Address } from '@celo/utils/lib/address' import { NativeSigner } from '@celo/utils/lib/signatureUtils' -import { newKitFromWeb3 } from '../kit' -import { createNameClaim } from './claims/claim' +import { createNameClaim } from './claim' import { ClaimTypes, IdentityMetadataWrapper } from './metadata' testWithAnvilL1('Metadata', (web3) => { diff --git a/packages/sdk/contractkit/src/identity/metadata.ts b/packages/sdk/metadata-claims/src/metadata.ts similarity index 88% rename from packages/sdk/contractkit/src/identity/metadata.ts rename to packages/sdk/metadata-claims/src/metadata.ts index f1bd0977e..e02fb20be 100644 --- a/packages/sdk/contractkit/src/identity/metadata.ts +++ b/packages/sdk/metadata-claims/src/metadata.ts @@ -7,14 +7,17 @@ import fetch from 'cross-fetch' import { isLeft } from 'fp-ts/lib/Either' import * as t from 'io-ts' import { PathReporter } from 'io-ts/lib/PathReporter' -import { ContractKit } from '../kit' -import { AccountsWrapper } from '../wrappers/Accounts' -import { Claim, ClaimPayload, ClaimType, hashOfClaims, isOfType } from './claims/claim' -import { ClaimTypes, SINGULAR_CLAIM_TYPES } from './claims/types' +import { Claim, ClaimPayload, ClaimType, hashOfClaims, isOfType } from './claim' +import { + AccountMetadataSignerGetters, + AccountSignerGetters, + ClaimTypes, + SINGULAR_CLAIM_TYPES, +} from './types' -export { ClaimTypes } from './claims/types' +export { ClaimTypes } from './types' -type KitOrAccountsWrapper = ContractKit | AccountsWrapper +type KitOrAccountsWrapper = AccountMetadataSignerGetters const MetaType = t.type({ address: AddressType, @@ -216,13 +219,21 @@ export class IdentityMetadataWrapper { } // at first these functions required a `kit` but thats a bit heavy -// as all that is used is the Accounts Wrapper so allow either. +// as all that is used are functions on the accounts contract so allow just those functions to be passed async function getAccounts( contractKitOrAccountsWrapper: KitOrAccountsWrapper -): Promise { - if (contractKitOrAccountsWrapper instanceof AccountsWrapper) { +): Promise { + if ( + 'getVoteSigner' in contractKitOrAccountsWrapper && + 'isAccount' in contractKitOrAccountsWrapper && + 'getValidatorSigner' in contractKitOrAccountsWrapper && + 'getAttestationSigner' in contractKitOrAccountsWrapper + ) { return contractKitOrAccountsWrapper - } else { - return contractKitOrAccountsWrapper.contracts.getAccounts() } + throw new Error( + `Must pass object with the required functions: getVoteSigner, isAccount, getValidatorSigner, getAttestationSigner. Received ${JSON.stringify( + contractKitOrAccountsWrapper + )}` + ) } diff --git a/packages/sdk/contractkit/src/identity/claims/types.ts b/packages/sdk/metadata-claims/src/types.ts similarity index 52% rename from packages/sdk/contractkit/src/identity/claims/types.ts rename to packages/sdk/metadata-claims/src/types.ts index 3f9eea780..17aa3d492 100644 --- a/packages/sdk/contractkit/src/identity/claims/types.ts +++ b/packages/sdk/metadata-claims/src/types.ts @@ -1,5 +1,7 @@ import * as t from 'io-ts' +import type { Address, StrongAddress } from '@celo/base/lib/address' + export const SignatureType = t.string export const TimestampType = t.number @@ -18,3 +20,14 @@ export enum ClaimTypes { export const VERIFIABLE_CLAIM_TYPES = [ClaimTypes.KEYBASE, ClaimTypes.ACCOUNT, ClaimTypes.DOMAIN] export const SINGULAR_CLAIM_TYPES = [ClaimTypes.NAME] + +export type AccountSignerGetters = { + isAccount: (address: Address) => Promise + getVoteSigner: (address: Address) => Promise + getValidatorSigner: (address: Address) => Promise + getAttestationSigner: (address: Address) => Promise +} + +export type AccountMetadataSignerGetters = { + getMetadataURL: (address: string) => Promise +} & AccountSignerGetters diff --git a/packages/sdk/contractkit/src/identity/claims/verify.ts b/packages/sdk/metadata-claims/src/verify.ts similarity index 73% rename from packages/sdk/contractkit/src/identity/claims/verify.ts rename to packages/sdk/metadata-claims/src/verify.ts index 5d966c52c..d01f1e5ae 100644 --- a/packages/sdk/contractkit/src/identity/claims/verify.ts +++ b/packages/sdk/metadata-claims/src/verify.ts @@ -1,29 +1,33 @@ import { eqAddress } from '@celo/base/lib/address' import { isValidUrl } from '@celo/base/lib/io' -import { resolveTxt } from 'dns' -import { promisify } from 'util' -import { ContractKit } from '../..' -import { IdentityMetadataWrapper } from '../metadata' +import { resolveTxt } from 'node:dns' // TODO replace with non node specifc package +import { promisify } from 'node:util' // TODO replace with non node specifc package import { AccountClaim } from './account' import { Claim, DOMAIN_TXT_HEADER, DomainClaim, serializeClaim } from './claim' import { verifyKeybaseClaim } from './keybase' -import { ClaimTypes } from './types' +import { IdentityMetadataWrapper } from './metadata' +import { AccountMetadataSignerGetters, ClaimTypes } from './types' /** * Verifies a claim made by an account, i.e. whether a claim can be verified to be correct - * @param kit ContractKit object + * @param kit AccountMetadataSignerGetters object * @param claim The claim to verify * @param address The address that is making the claim * @returns If valid, returns undefined. If invalid or unable to verify, returns a string with the error */ -export async function verifyClaim(kit: ContractKit, claim: Claim, address: string, tries = 3) { +export async function verifyClaim( + accountMeta: AccountMetadataSignerGetters, + claim: Claim, + address: string, + tries = 3 +) { switch (claim.type) { case ClaimTypes.KEYBASE: - return verifyKeybaseClaim(kit, claim, address) + return verifyKeybaseClaim(accountMeta, claim, address) case ClaimTypes.ACCOUNT: - return verifyAccountClaim(kit, claim, address, tries) + return verifyAccountClaim(accountMeta, claim, address, tries) case ClaimTypes.DOMAIN: - return verifyDomainRecord(kit, claim, address) + return verifyDomainRecord(accountMeta, claim, address) default: break } @@ -31,12 +35,12 @@ export async function verifyClaim(kit: ContractKit, claim: Claim, address: strin } export const verifyAccountClaim = async ( - kit: ContractKit, + accountMeta: AccountMetadataSignerGetters, claim: AccountClaim, address: string, tries = 3 ) => { - const metadataURL = await (await kit.contracts.getAccounts()).getMetadataURL(claim.address) + const metadataURL = await accountMeta.getMetadataURL(claim.address) if (!isValidUrl(metadataURL)) { return `Metadata URL of ${claim.address} could not be retrieved` @@ -44,11 +48,7 @@ export const verifyAccountClaim = async ( let metadata: IdentityMetadataWrapper try { - metadata = await IdentityMetadataWrapper.fetchFromURL( - await kit.contracts.getAccounts(), - metadataURL, - tries - ) + metadata = await IdentityMetadataWrapper.fetchFromURL(accountMeta, metadataURL, tries) } catch (error: any) { return `Metadata could not be fetched for ${ claim.address @@ -74,7 +74,7 @@ type dnsResolverFunction = ( * `celo-site-verification` and a valid signature in base64 */ export const verifyDomainRecord = async ( - kit: ContractKit, + accountMeta: AccountMetadataSignerGetters, claim: DomainClaim, address: string, dnsResolver: dnsResolverFunction = resolveTxt as any @@ -89,7 +89,7 @@ export const verifyDomainRecord = async ( const signature = Buffer.from(signatureBase64, 'base64').toString('binary') if ( await IdentityMetadataWrapper.verifySignerForAddress( - await kit.contracts.getAccounts(), + accountMeta, serializeClaim(claim), signature, address diff --git a/packages/sdk/metadata-claims/tsconfig.json b/packages/sdk/metadata-claims/tsconfig.json new file mode 100644 index 000000000..48263c991 --- /dev/null +++ b/packages/sdk/metadata-claims/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "@celo/typescript/tsconfig.library.json", + "compilerOptions": { + "rootDir": "src", + "outDir": "lib" + }, + "include": ["src/**/*"], + "exclude": ["**/*.test.ts"] +} diff --git a/packages/sdk/metadata-claims/typedoc.json b/packages/sdk/metadata-claims/typedoc.json new file mode 100644 index 000000000..67eadcaca --- /dev/null +++ b/packages/sdk/metadata-claims/typedoc.json @@ -0,0 +1,19 @@ +{ + "exclude": [ + "**/*+(index|.test).ts" + ], + "excludePrivate": true, + "excludeProtected": true, + "hideGenerator": true, + "out": "../../../docs/sdk/metadata-claims", + "gitRevision": "master", + "readme": "none", + "entryPoints": [ + "./src" + ], + "githubPages": false, + "plugin": [ + "typedoc-plugin-markdown" + ], + "entryPointStrategy": "expand" +} \ No newline at end of file diff --git a/packages/sdk/wallets/wallet-rpc/lib/index.d.ts b/packages/sdk/wallets/wallet-rpc/lib/index.d.ts new file mode 100644 index 000000000..e3de2bfe5 --- /dev/null +++ b/packages/sdk/wallets/wallet-rpc/lib/index.d.ts @@ -0,0 +1,2 @@ +export * from './rpc-signer'; +export * from './rpc-wallet'; diff --git a/packages/sdk/wallets/wallet-rpc/lib/index.js b/packages/sdk/wallets/wallet-rpc/lib/index.js new file mode 100644 index 000000000..8f88dc8f3 --- /dev/null +++ b/packages/sdk/wallets/wallet-rpc/lib/index.js @@ -0,0 +1,19 @@ +"use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __exportStar = (this && this.__exportStar) || function(m, exports) { + for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +__exportStar(require("./rpc-signer"), exports); +__exportStar(require("./rpc-wallet"), exports); +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/packages/sdk/wallets/wallet-rpc/lib/index.js.map b/packages/sdk/wallets/wallet-rpc/lib/index.js.map new file mode 100644 index 000000000..6d4e2d746 --- /dev/null +++ b/packages/sdk/wallets/wallet-rpc/lib/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,+CAA4B;AAC5B,+CAA4B"} \ No newline at end of file diff --git a/packages/sdk/wallets/wallet-rpc/lib/rpc-signer.d.ts b/packages/sdk/wallets/wallet-rpc/lib/rpc-signer.d.ts new file mode 100644 index 000000000..99bcf31b6 --- /dev/null +++ b/packages/sdk/wallets/wallet-rpc/lib/rpc-signer.d.ts @@ -0,0 +1,49 @@ +/// +import { CeloTx, EncodedTransaction, RpcCaller, Signer } from '@celo/connect'; +import { EIP712TypedData } from '@celo/utils/lib/sign-typed-data-utils'; +/** + * Implements the signer interface on top of the JSON-RPC interface. + * @deprecated https://forum.celo.org/t/deprecation-of-celo-wallet-rpc/8452 + */ +export declare class RpcSigner implements Signer { + protected rpc: RpcCaller; + protected account: string; + protected unlockBufferSeconds: number; + protected unlockTime?: number | undefined; + protected unlockDuration?: number | undefined; + /** + * Construct a new instance of the RPC signer + * + * @param rpc RPC caller instance + * @param account Account address derived from the private key to be called in init + * @param unlockBufferSeconds Number of seconds to shrink the unlocked duration by to account for + * latency and timing inconsistencies on the node + * @param unlockTime Timestamp in seconds when the signer was last unlocked + * @param unlockDuration Number of seconds that the signer was last unlocked for + * + */ + constructor(rpc: RpcCaller, account: string, unlockBufferSeconds?: number, unlockTime?: number | undefined, unlockDuration?: number | undefined); + init: (privateKey: string, passphrase: string) => Promise; + signRawTransaction(tx: CeloTx): Promise; + signTransaction(): Promise<{ + v: number; + r: Buffer; + s: Buffer; + }>; + signTypedData(typedData: EIP712TypedData): Promise<{ + v: number; + r: Buffer; + s: Buffer; + }>; + signPersonalMessage(data: string): Promise<{ + v: number; + r: Buffer; + s: Buffer; + }>; + getNativeKey: () => string; + unlock(passphrase: string, duration: number): Promise; + isUnlocked(): boolean; + private callAndCheckResponse; + decrypt(ciphertext: Buffer): Promise; + computeSharedSecret(_publicKey: string): Promise; +} diff --git a/packages/sdk/wallets/wallet-rpc/lib/rpc-signer.js b/packages/sdk/wallets/wallet-rpc/lib/rpc-signer.js new file mode 100644 index 000000000..7b945f0be --- /dev/null +++ b/packages/sdk/wallets/wallet-rpc/lib/rpc-signer.js @@ -0,0 +1,164 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.RpcSigner = void 0; +const address_1 = require("@celo/base/lib/address"); +const wallet_base_1 = require("@celo/wallet-base"); +const bignumber_js_1 = __importDefault(require("bignumber.js")); +const INCORRECT_PASSWORD_ERROR = 'could not decrypt key with given password'; +const currentTimeInSeconds = () => Math.floor(Date.now() / 1000); +const toRpcHex = (val) => { + if (typeof val === 'number' || val instanceof bignumber_js_1.default) { + return (0, address_1.ensureLeading0x)(val.toString(16)); + } + else if (typeof val === 'string') { + return (0, address_1.ensureLeading0x)(val); + } + else { + return '0x0'; + } +}; +// TODO(yorke): move this into rpc-caller and generate typings from RPC spec +var RpcSignerEndpoint; +(function (RpcSignerEndpoint) { + RpcSignerEndpoint["ImportAccount"] = "personal_importRawKey"; + RpcSignerEndpoint["UnlockAccount"] = "personal_unlockAccount"; + RpcSignerEndpoint["SignTransaction"] = "eth_signTransaction"; + RpcSignerEndpoint["SignBytes"] = "eth_sign"; + RpcSignerEndpoint["SignTypedData"] = "eth_signTypedData"; + RpcSignerEndpoint["Decrypt"] = "personal_decrypt"; +})(RpcSignerEndpoint || (RpcSignerEndpoint = {})); +/** + * Implements the signer interface on top of the JSON-RPC interface. + * @deprecated https://forum.celo.org/t/deprecation-of-celo-wallet-rpc/8452 + */ +class RpcSigner { + /** + * Construct a new instance of the RPC signer + * + * @param rpc RPC caller instance + * @param account Account address derived from the private key to be called in init + * @param unlockBufferSeconds Number of seconds to shrink the unlocked duration by to account for + * latency and timing inconsistencies on the node + * @param unlockTime Timestamp in seconds when the signer was last unlocked + * @param unlockDuration Number of seconds that the signer was last unlocked for + * + */ + constructor(rpc, account, unlockBufferSeconds = 5, unlockTime, unlockDuration) { + this.rpc = rpc; + this.account = account; + this.unlockBufferSeconds = unlockBufferSeconds; + this.unlockTime = unlockTime; + this.unlockDuration = unlockDuration; + this.init = (privateKey, passphrase) => this.callAndCheckResponse(RpcSignerEndpoint.ImportAccount, [ + (0, address_1.ensureLeading0x)(privateKey), + passphrase, + ]); + this.getNativeKey = () => this.account; + } + signRawTransaction(tx) { + return __awaiter(this, void 0, void 0, function* () { + if ((0, address_1.normalizeAddressWith0x)(tx.from) !== this.account) { + throw new Error(`RpcSigner cannot sign tx with 'from' ${tx.from}`); + } + // see geth SendTxArgs type + // https://github.com/celo-org/celo-blockchain/blob/fc20d6921478cda68fc88797078f20053bae8866/internal/ethapi/api.go#L1241C6-L1241C20 + const rpcTx = Object.assign(Object.assign(Object.assign({}, tx), { nonce: toRpcHex(tx.nonce), value: toRpcHex(tx.value), gas: toRpcHex(tx.gas) }), (tx.gasPrice + ? { + gasPrice: toRpcHex(tx.gasPrice), + } + : { + maxPriorityFeePerGas: toRpcHex(tx.maxPriorityFeePerGas), + maxFeePerGas: toRpcHex(tx.maxFeePerGas), + })); + return this.callAndCheckResponse(RpcSignerEndpoint.SignTransaction, [rpcTx]); + }); + } + signTransaction() { + return __awaiter(this, void 0, void 0, function* () { + throw new Error('signTransaction unimplemented; use signRawTransaction'); + }); + } + signTypedData(typedData) { + return __awaiter(this, void 0, void 0, function* () { + const result = yield this.callAndCheckResponse(RpcSignerEndpoint.SignTypedData, [ + this.account, + typedData, + ]); + return (0, wallet_base_1.decodeSig)(result); + }); + } + signPersonalMessage(data) { + return __awaiter(this, void 0, void 0, function* () { + const result = yield this.callAndCheckResponse(RpcSignerEndpoint.SignBytes, [ + this.account, + data, + ]); + return (0, wallet_base_1.decodeSig)(result); + }); + } + unlock(passphrase, duration) { + var _a, _b; + return __awaiter(this, void 0, void 0, function* () { + try { + yield this.callAndCheckResponse(RpcSignerEndpoint.UnlockAccount, [ + this.account, + passphrase, + duration, + ]); + } + catch (error) { + // The callAndCheckResponse will throw an error if the passphrase is incorrect + if ((_b = (_a = error === null || error === void 0 ? void 0 : error.message) === null || _a === void 0 ? void 0 : _a.toLowerCase()) === null || _b === void 0 ? void 0 : _b.includes(INCORRECT_PASSWORD_ERROR)) { + return false; + } + // Re-throw otherwise + throw error; + } + this.unlockTime = currentTimeInSeconds(); + this.unlockDuration = duration; + return true; + }); + } + isUnlocked() { + if (this.unlockDuration === undefined || this.unlockTime === undefined) { + return false; + } + return this.unlockTime + this.unlockDuration - this.unlockBufferSeconds > currentTimeInSeconds(); + } + callAndCheckResponse(endpoint, params) { + return __awaiter(this, void 0, void 0, function* () { + const response = yield this.rpc.call(endpoint, params); + if (response.error) { + throw new Error(`RpcSigner@${endpoint} failed with \n'${response.error.message}'`); + } + return response.result; + }); + } + decrypt(ciphertext) { + return __awaiter(this, void 0, void 0, function* () { + const resp = yield this.callAndCheckResponse(RpcSignerEndpoint.Decrypt, [ + this.account, + (0, address_1.ensureLeading0x)(ciphertext.toString('hex')), + ]); + return Buffer.from((0, address_1.trimLeading0x)(resp), 'hex'); + }); + } + computeSharedSecret(_publicKey) { + throw new Error('Not implemented'); + return Promise.resolve(Buffer.from([])); + } +} +exports.RpcSigner = RpcSigner; +//# sourceMappingURL=rpc-signer.js.map \ No newline at end of file diff --git a/packages/sdk/wallets/wallet-rpc/lib/rpc-signer.js.map b/packages/sdk/wallets/wallet-rpc/lib/rpc-signer.js.map new file mode 100644 index 000000000..5f6a980c4 --- /dev/null +++ b/packages/sdk/wallets/wallet-rpc/lib/rpc-signer.js.map @@ -0,0 +1 @@ +{"version":3,"file":"rpc-signer.js","sourceRoot":"","sources":["../src/rpc-signer.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,oDAA+F;AAG/F,mDAA6C;AAC7C,gEAAoC;AAGpC,MAAM,wBAAwB,GAAG,2CAA2C,CAAA;AAC5E,MAAM,oBAAoB,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAA;AAEhE,MAAM,QAAQ,GAAG,CAAC,GAAqC,EAAE,EAAE;IACzD,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,YAAY,sBAAS,EAAE,CAAC;QACxD,OAAO,IAAA,yBAAe,EAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAA;IAC1C,CAAC;SAAM,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QACnC,OAAO,IAAA,yBAAe,EAAC,GAAG,CAAC,CAAA;IAC7B,CAAC;SAAM,CAAC;QACN,OAAO,KAAK,CAAA;IACd,CAAC;AACH,CAAC,CAAA;AAED,4EAA4E;AAC5E,IAAK,iBAOJ;AAPD,WAAK,iBAAiB;IACpB,4DAAuC,CAAA;IACvC,6DAAwC,CAAA;IACxC,4DAAuC,CAAA;IACvC,2CAAsB,CAAA;IACtB,wDAAmC,CAAA;IACnC,iDAA4B,CAAA;AAC9B,CAAC,EAPI,iBAAiB,KAAjB,iBAAiB,QAOrB;AAoBD;;;GAGG;AACH,MAAa,SAAS;IACpB;;;;;;;;;;OAUG;IACH,YACY,GAAc,EACd,OAAe,EACf,sBAAsB,CAAC,EACvB,UAAmB,EACnB,cAAuB;QAJvB,QAAG,GAAH,GAAG,CAAW;QACd,YAAO,GAAP,OAAO,CAAQ;QACf,wBAAmB,GAAnB,mBAAmB,CAAI;QACvB,eAAU,GAAV,UAAU,CAAS;QACnB,mBAAc,GAAd,cAAc,CAAS;QAGnC,SAAI,GAAG,CAAC,UAAkB,EAAE,UAAkB,EAAE,EAAE,CAChD,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,aAAa,EAAE;YACzD,IAAA,yBAAe,EAAC,UAAU,CAAC;YAC3B,UAAU;SACX,CAAC,CAAA;QA8CJ,iBAAY,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAA;IApD9B,CAAC;IAQE,kBAAkB,CAAC,EAAU;;YACjC,IAAI,IAAA,gCAAsB,EAAC,EAAE,CAAC,IAAe,CAAC,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC;gBAChE,MAAM,IAAI,KAAK,CAAC,wCAAwC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAA;YACpE,CAAC;YACD,2BAA2B;YAC3B,oIAAoI;YACpI,MAAM,KAAK,iDACN,EAAE,KACL,KAAK,EAAE,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,EACzB,KAAK,EAAE,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,EACzB,GAAG,EAAE,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,KAClB,CAAC,EAAE,CAAC,QAAQ;gBACb,CAAC,CAAC;oBACE,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC;iBAChC;gBACH,CAAC,CAAC;oBACE,oBAAoB,EAAE,QAAQ,CAAC,EAAE,CAAC,oBAAoB,CAAC;oBACvD,YAAY,EAAE,QAAQ,CAAC,EAAE,CAAC,YAAY,CAAC;iBACxC,CAAC,CACP,CAAA;YACD,OAAO,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,eAAe,EAAE,CAAC,KAAK,CAAC,CAAC,CAAA;QAC9E,CAAC;KAAA;IAEK,eAAe;;YACnB,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAA;QAC1E,CAAC;KAAA;IAEK,aAAa,CAAC,SAA0B;;YAC5C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,aAAa,EAAE;gBAC9E,IAAI,CAAC,OAAO;gBACZ,SAAS;aACV,CAAC,CAAA;YAEF,OAAO,IAAA,uBAAS,EAAC,MAAa,CAAC,CAAA;QACjC,CAAC;KAAA;IAEK,mBAAmB,CAAC,IAAY;;YACpC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,SAAS,EAAE;gBAC1E,IAAI,CAAC,OAAO;gBACZ,IAAI;aACL,CAAC,CAAA;YACF,OAAO,IAAA,uBAAS,EAAC,MAAa,CAAC,CAAA;QACjC,CAAC;KAAA;IAIK,MAAM,CAAC,UAAkB,EAAE,QAAgB;;;YAC/C,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,aAAa,EAAE;oBAC/D,IAAI,CAAC,OAAO;oBACZ,UAAU;oBACV,QAAQ;iBACT,CAAC,CAAA;YACJ,CAAC;YAAC,OAAO,KAAU,EAAE,CAAC;gBACpB,8EAA8E;gBAC9E,IAAI,MAAA,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,OAAO,0CAAE,WAAW,EAAE,0CAAE,QAAQ,CAAC,wBAAwB,CAAC,EAAE,CAAC;oBACtE,OAAO,KAAK,CAAA;gBACd,CAAC;gBAED,qBAAqB;gBACrB,MAAM,KAAK,CAAA;YACb,CAAC;YAED,IAAI,CAAC,UAAU,GAAG,oBAAoB,EAAE,CAAA;YACxC,IAAI,CAAC,cAAc,GAAG,QAAQ,CAAA;YAC9B,OAAO,IAAI,CAAA;;KACZ;IAED,UAAU;QACR,IAAI,IAAI,CAAC,cAAc,KAAK,SAAS,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YACvE,OAAO,KAAK,CAAA;QACd,CAAC;QACD,OAAO,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,mBAAmB,GAAG,oBAAoB,EAAE,CAAA;IAClG,CAAC;IAEa,oBAAoB,CAChC,QAAW,EACX,MAAkC;;YAElC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;YACtD,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;gBACnB,MAAM,IAAI,KAAK,CAAC,aAAa,QAAQ,mBAAoB,QAAQ,CAAC,KAAa,CAAC,OAAO,GAAG,CAAC,CAAA;YAC7F,CAAC;YACD,OAAO,QAAQ,CAAC,MAAmD,CAAA;QACrE,CAAC;KAAA;IAEK,OAAO,CAAC,UAAkB;;YAC9B,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,OAAO,EAAE;gBACtE,IAAI,CAAC,OAAO;gBACZ,IAAA,yBAAe,EAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;aAC5C,CAAC,CAAA;YAEF,OAAO,MAAM,CAAC,IAAI,CAAC,IAAA,uBAAa,EAAC,IAAI,CAAC,EAAE,KAAK,CAAC,CAAA;QAChD,CAAC;KAAA;IAED,mBAAmB,CAAC,UAAkB;QACpC,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAA;QAClC,OAAO,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAA;IACzC,CAAC;CACF;AA7HD,8BA6HC"} \ No newline at end of file diff --git a/packages/sdk/wallets/wallet-rpc/lib/rpc-wallet.d.ts b/packages/sdk/wallets/wallet-rpc/lib/rpc-wallet.d.ts new file mode 100644 index 000000000..7e77f3880 --- /dev/null +++ b/packages/sdk/wallets/wallet-rpc/lib/rpc-wallet.d.ts @@ -0,0 +1,29 @@ +import { CeloTx, Provider, RpcCaller } from '@celo/connect'; +import { UnlockableWallet } from '@celo/wallet-base'; +import { RemoteWallet } from '@celo/wallet-remote'; +import { RpcSigner } from './rpc-signer'; +export declare enum RpcWalletErrors { + FetchAccounts = "RpcWallet: failed to fetch accounts from server", + AccountAlreadyExists = "RpcWallet: account already exists" +} +/** + * WARNING: This class should only be used with well-permissioned providers (ie IPC) + * to avoid sensitive user 'privateKey' and 'passphrase' information being exposed + * + * @deprecated https://forum.celo.org/t/deprecation-of-celo-wallet-rpc/8452 + */ +export declare class RpcWallet extends RemoteWallet implements UnlockableWallet { + protected _provider: Provider; + protected readonly rpc: RpcCaller; + constructor(_provider: Provider); + loadAccountSigners(): Promise>; + addAccount(privateKey: string, passphrase: string): Promise; + unlockAccount(address: string, passphrase: string, duration: number): Promise; + isAccountUnlocked(address: string): boolean; + /** + * Gets the signer based on the 'from' field in the tx body + * @param txParams Transaction to sign + * @dev overrides WalletBase.signTransaction + */ + signTransaction(txParams: CeloTx): Promise; +} diff --git a/packages/sdk/wallets/wallet-rpc/lib/rpc-wallet.js b/packages/sdk/wallets/wallet-rpc/lib/rpc-wallet.js new file mode 100644 index 000000000..ac45d8909 --- /dev/null +++ b/packages/sdk/wallets/wallet-rpc/lib/rpc-wallet.js @@ -0,0 +1,86 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.RpcWallet = exports.RpcWalletErrors = void 0; +const address_1 = require("@celo/base/lib/address"); +const connect_1 = require("@celo/connect"); +const address_2 = require("@celo/utils/lib/address"); +const wallet_remote_1 = require("@celo/wallet-remote"); +const rpc_signer_1 = require("./rpc-signer"); +var RpcWalletErrors; +(function (RpcWalletErrors) { + RpcWalletErrors["FetchAccounts"] = "RpcWallet: failed to fetch accounts from server"; + RpcWalletErrors["AccountAlreadyExists"] = "RpcWallet: account already exists"; +})(RpcWalletErrors || (exports.RpcWalletErrors = RpcWalletErrors = {})); +/** + * WARNING: This class should only be used with well-permissioned providers (ie IPC) + * to avoid sensitive user 'privateKey' and 'passphrase' information being exposed + * + * @deprecated https://forum.celo.org/t/deprecation-of-celo-wallet-rpc/8452 + */ +class RpcWallet extends wallet_remote_1.RemoteWallet { + constructor(_provider) { + super(); + this._provider = _provider; + this.rpc = new connect_1.HttpRpcCaller(_provider); + } + loadAccountSigners() { + return __awaiter(this, void 0, void 0, function* () { + const addressToSigner = new Map(); + const resp = yield this.rpc.call('eth_accounts', []); + if (resp.error) { + throw new Error(RpcWalletErrors.FetchAccounts); + } + const accounts = resp.result; + accounts.forEach((account) => { + addressToSigner.set(account, new rpc_signer_1.RpcSigner(this.rpc, account)); + }); + return addressToSigner; + }); + } + addAccount(privateKey, passphrase) { + return __awaiter(this, void 0, void 0, function* () { + const address = (0, address_1.normalizeAddressWith0x)((0, address_2.privateKeyToAddress)((0, address_1.ensureLeading0x)(privateKey))); + if (this.hasAccount(address)) { + throw new Error(RpcWalletErrors.AccountAlreadyExists); + } + const signer = new rpc_signer_1.RpcSigner(this.rpc, address); + const resultantAddress = yield signer.init(privateKey, passphrase); + this.addSigner(resultantAddress, signer); + return resultantAddress; + }); + } + unlockAccount(address, passphrase, duration) { + return __awaiter(this, void 0, void 0, function* () { + const signer = this.getSigner(address); + return signer.unlock(passphrase, duration); + }); + } + isAccountUnlocked(address) { + const signer = this.getSigner(address); + return signer.isUnlocked(); + } + /** + * Gets the signer based on the 'from' field in the tx body + * @param txParams Transaction to sign + * @dev overrides WalletBase.signTransaction + */ + signTransaction(txParams) { + return __awaiter(this, void 0, void 0, function* () { + // Get the signer from the 'from' field + const fromAddress = txParams.from.toString(); + const signer = this.getSigner(fromAddress); + return signer.signRawTransaction(txParams); + }); + } +} +exports.RpcWallet = RpcWallet; +//# sourceMappingURL=rpc-wallet.js.map \ No newline at end of file diff --git a/packages/sdk/wallets/wallet-rpc/lib/rpc-wallet.js.map b/packages/sdk/wallets/wallet-rpc/lib/rpc-wallet.js.map new file mode 100644 index 000000000..032c019b6 --- /dev/null +++ b/packages/sdk/wallets/wallet-rpc/lib/rpc-wallet.js.map @@ -0,0 +1 @@ +{"version":3,"file":"rpc-wallet.js","sourceRoot":"","sources":["../src/rpc-wallet.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,oDAAgF;AAChF,2CAA0E;AAC1E,qDAA6D;AAE7D,uDAAkD;AAClD,6CAAwC;AAExC,IAAY,eAGX;AAHD,WAAY,eAAe;IACzB,oFAAiE,CAAA;IACjE,6EAA0D,CAAA;AAC5D,CAAC,EAHW,eAAe,+BAAf,eAAe,QAG1B;AAED;;;;;GAKG;AACH,MAAa,SAAU,SAAQ,4BAAuB;IAGpD,YAAsB,SAAmB;QACvC,KAAK,EAAE,CAAA;QADa,cAAS,GAAT,SAAS,CAAU;QAEvC,IAAI,CAAC,GAAG,GAAG,IAAI,uBAAa,CAAC,SAAS,CAAC,CAAA;IACzC,CAAC;IAEK,kBAAkB;;YACtB,MAAM,eAAe,GAAG,IAAI,GAAG,EAAqB,CAAA;YACpD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC,CAAA;YACpD,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBACf,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,aAAa,CAAC,CAAA;YAChD,CAAC;YACD,MAAM,QAAQ,GAAa,IAAI,CAAC,MAAO,CAAA;YACvC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;gBAC3B,eAAe,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,sBAAS,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAA;YAChE,CAAC,CAAC,CAAA;YACF,OAAO,eAAe,CAAA;QACxB,CAAC;KAAA;IAEK,UAAU,CAAC,UAAkB,EAAE,UAAkB;;YACrD,MAAM,OAAO,GAAG,IAAA,gCAAsB,EAAC,IAAA,6BAAmB,EAAC,IAAA,yBAAe,EAAC,UAAU,CAAC,CAAC,CAAC,CAAA;YACxF,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC7B,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,oBAAoB,CAAC,CAAA;YACvD,CAAC;YACD,MAAM,MAAM,GAAG,IAAI,sBAAS,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;YAC/C,MAAM,gBAAgB,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,CAAA;YAClE,IAAI,CAAC,SAAS,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAA;YACxC,OAAO,gBAAgB,CAAA;QACzB,CAAC;KAAA;IAEK,aAAa,CAAC,OAAe,EAAE,UAAkB,EAAE,QAAgB;;YACvE,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;YACtC,OAAO,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAA;QAC5C,CAAC;KAAA;IAED,iBAAiB,CAAC,OAAe;QAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;QACtC,OAAO,MAAM,CAAC,UAAU,EAAE,CAAA;IAC5B,CAAC;IAED;;;;OAIG;IACG,eAAe,CAAC,QAAgB;;YACpC,uCAAuC;YACvC,MAAM,WAAW,GAAG,QAAQ,CAAC,IAAK,CAAC,QAAQ,EAAE,CAAA;YAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAA;YAC1C,OAAO,MAAM,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAA;QAC5C,CAAC;KAAA;CACF;AArDD,8BAqDC"} \ No newline at end of file diff --git a/packages/sdk/wallets/wallet-rpc/lib/rpc-wallet.test.d.ts b/packages/sdk/wallets/wallet-rpc/lib/rpc-wallet.test.d.ts new file mode 100644 index 000000000..ff9ea3c17 --- /dev/null +++ b/packages/sdk/wallets/wallet-rpc/lib/rpc-wallet.test.d.ts @@ -0,0 +1,39 @@ +export declare const CHAIN_ID = 44378; +export declare const TYPED_DATA: { + types: { + EIP712Domain: { + name: string; + type: string; + }[]; + Person: { + name: string; + type: string; + }[]; + Mail: { + name: string; + type: string; + }[]; + }; + primaryType: string; + domain: { + name: string; + version: string; + chainId: number; + verifyingContract: string; + }; + message: { + from: { + name: string; + wallet: string; + }; + to: { + name: string; + wallet: string; + }; + contents: string; + }; +}; +export declare const PRIVATE_KEY1 = "1234567890abcdef1234567890abcdef1234567890abcdef1234567890abbdef"; +export declare const ACCOUNT_ADDRESS1: `0x${string}`; +export declare const PRIVATE_KEY2 = "0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890fdeccc"; +export declare const ACCOUNT_ADDRESS2: `0x${string}`; diff --git a/packages/sdk/wallets/wallet-rpc/lib/rpc-wallet.test.js b/packages/sdk/wallets/wallet-rpc/lib/rpc-wallet.test.js new file mode 100644 index 000000000..7aaa5858c --- /dev/null +++ b/packages/sdk/wallets/wallet-rpc/lib/rpc-wallet.test.js @@ -0,0 +1,227 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ACCOUNT_ADDRESS2 = exports.PRIVATE_KEY2 = exports.ACCOUNT_ADDRESS1 = exports.PRIVATE_KEY1 = exports.TYPED_DATA = exports.CHAIN_ID = void 0; +const connect_1 = require("@celo/connect"); +const ganache_test_1 = require("@celo/dev-utils/lib/ganache-test"); +const address_1 = require("@celo/utils/lib/address"); +const signatureUtils_1 = require("@celo/utils/lib/signatureUtils"); +const wallet_base_1 = require("@celo/wallet-base"); +const net_1 = __importDefault(require("net")); +const web3_1 = __importDefault(require("web3")); +const rpc_wallet_1 = require("./rpc-wallet"); +exports.CHAIN_ID = 44378; +// Sample data from the official EIP-712 example: +// https://github.com/ethereum/EIPs/blob/master/assets/eip-712/Example.js +exports.TYPED_DATA = { + types: { + EIP712Domain: [ + { name: 'name', type: 'string' }, + { name: 'version', type: 'string' }, + { name: 'chainId', type: 'uint256' }, + { name: 'verifyingContract', type: 'address' }, + ], + Person: [ + { name: 'name', type: 'string' }, + { name: 'wallet', type: 'address' }, + ], + Mail: [ + { name: 'from', type: 'Person' }, + { name: 'to', type: 'Person' }, + { name: 'contents', type: 'string' }, + ], + }, + primaryType: 'Mail', + domain: { + name: 'Ether Mail', + version: '1', + chainId: 1, + verifyingContract: '0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC', + }, + message: { + from: { + name: 'Cow', + wallet: '0xCD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826', + }, + to: { + name: 'Bob', + wallet: '0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB', + }, + contents: 'Hello, Bob!', + }, +}; +exports.PRIVATE_KEY1 = '1234567890abcdef1234567890abcdef1234567890abcdef1234567890abbdef'; +exports.ACCOUNT_ADDRESS1 = (0, address_1.normalizeAddressWith0x)((0, address_1.privateKeyToAddress)(exports.PRIVATE_KEY1)); +exports.PRIVATE_KEY2 = '0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890fdeccc'; +exports.ACCOUNT_ADDRESS2 = (0, address_1.normalizeAddressWith0x)((0, address_1.privateKeyToAddress)(exports.PRIVATE_KEY2)); +const PASSPHRASE = 'ce10'; +const DURATION = 10000; +// ./build/bin/geth --datadir=./envs/alfajoresstaging --syncmode=lightest --rpcapi=net,eth,web3,personal --networkid=1101 +describe.skip('rpc-wallet', () => { + it('should work against local geth ipc', () => __awaiter(void 0, void 0, void 0, function* () { + const ipcUrl = '/Users/yorhodes/celo/blockchain/envs/alfajoresstaging/geth.ipc'; + const ipcProvider = new web3_1.default.providers.IpcProvider(ipcUrl, net_1.default); + const wallet = new rpc_wallet_1.RpcWallet(ipcProvider); + yield wallet.init(); + const account = yield wallet.addAccount(exports.PRIVATE_KEY1, PASSPHRASE); + yield wallet.unlockAccount(account, PASSPHRASE, DURATION); + const tx = { + from: exports.ACCOUNT_ADDRESS1, + to: exports.ACCOUNT_ADDRESS2, + value: 1000, + }; + const result = yield wallet.signTransaction(tx); + console.log(result); + const connection = new connect_1.Connection(new web3_1.default(ipcUrl), wallet); + const txResult = yield connection.sendSignedTransaction(result.raw); + console.log(txResult); + })); +}); +// It uses personal_importKey RPC call which is not supported in anvil +(0, ganache_test_1.testWithGanache)('rpc-wallet', (web3) => { + const provider = web3.currentProvider; + const rpcWallet = new rpc_wallet_1.RpcWallet(provider); + describe('with ganache web3 provider', () => { + let ganacheAccounts; + beforeAll(() => __awaiter(void 0, void 0, void 0, function* () { + yield rpcWallet.init(); + ganacheAccounts = yield web3.eth.getAccounts(); + ganacheAccounts = ganacheAccounts.map(address_1.normalizeAddressWith0x); + })); + test('initalizes with provider accounts', () => __awaiter(void 0, void 0, void 0, function* () { + const accounts = rpcWallet.getAccounts(); + expect(accounts).toEqual(ganacheAccounts); + })); + test('fails if you add an invalid private key', () => __awaiter(void 0, void 0, void 0, function* () { + try { + yield rpcWallet.addAccount('this is not a valid private key', PASSPHRASE); + throw new Error('Expected exception to be thrown'); + } + catch (e) { + expect(e.message).toBe('Expected 32 bytes of private key'); + } + })); + test('succeeds if you add a private key without 0x', () => __awaiter(void 0, void 0, void 0, function* () { + yield rpcWallet.addAccount(exports.PRIVATE_KEY1, PASSPHRASE); + expect(rpcWallet.hasAccount(exports.ACCOUNT_ADDRESS1)).toBeTruthy(); + })); + test('fails if you add a private key twice', () => __awaiter(void 0, void 0, void 0, function* () { + try { + yield rpcWallet.addAccount(exports.PRIVATE_KEY1, PASSPHRASE); + throw new Error('Expected exception to be thrown'); + } + catch (e) { + expect(e.message).toBe(`RpcWallet: account already exists`); + } + })); + test('succeeds if you add a private key with 0x', () => __awaiter(void 0, void 0, void 0, function* () { + yield rpcWallet.addAccount(exports.PRIVATE_KEY2, PASSPHRASE); + expect(rpcWallet.hasAccount(exports.ACCOUNT_ADDRESS2)).toBeTruthy(); + })); + describe('with added accounts', () => { + test('all addresses can be retrieved', () => { + expect(rpcWallet.getAccounts()).toEqual(ganacheAccounts.concat([exports.ACCOUNT_ADDRESS1, exports.ACCOUNT_ADDRESS2])); + }); + describe('unlocking', () => { + test('fails if you use an invalid passphrase', () => __awaiter(void 0, void 0, void 0, function* () { + try { + yield rpcWallet.unlockAccount(exports.ACCOUNT_ADDRESS1, 'wrong_passphrase', DURATION); + } + catch (e) { + expect(e.message).toContain('could not decrypt key with given passphrase'); + } + })); + test('succeeds if you use the correct passphrase', () => __awaiter(void 0, void 0, void 0, function* () { + yield rpcWallet.unlockAccount(exports.ACCOUNT_ADDRESS1, PASSPHRASE, DURATION); + const unlocked = rpcWallet.isAccountUnlocked(exports.ACCOUNT_ADDRESS1); + expect(unlocked).toBeTruthy(); + })); + }); + describe('signing', () => { + describe('using an unlocked address', () => { + beforeAll(() => __awaiter(void 0, void 0, void 0, function* () { + yield rpcWallet.unlockAccount(exports.ACCOUNT_ADDRESS1, PASSPHRASE, DURATION); + })); + describe('when calling signTransaction', () => { + let celoTransaction; + beforeEach(() => { + celoTransaction = { + from: exports.ACCOUNT_ADDRESS1, + to: exports.ACCOUNT_ADDRESS2, + chainId: exports.CHAIN_ID, + value: web3.utils.toWei('1', 'ether'), + nonce: 0, + gas: '10', + gasPrice: '99', + feeCurrency: '0x', + data: '0xabcdef', + }; + }); + test('succeeds with old school pricing', () => __awaiter(void 0, void 0, void 0, function* () { + yield expect(rpcWallet.signTransaction(celoTransaction)).resolves.toMatchInlineSnapshot(`"0xf86b8081991094588e4b68193001e4d10928660ab4165b813717c08a0100000000000000000083abcdef25a073bb7eaa60c810af1fad0f68fa15d4714f9990d0202b62797f6134493ec9f6fba046c13e92017228c2c8f0fae74ddd735021817f2f9757cd66debed078daf4070e"`); + })); + test('succeeds with with FeeMarketFields', () => __awaiter(void 0, void 0, void 0, function* () { + const feeMarketTransaction = Object.assign(Object.assign({}, celoTransaction), { gasPrice: undefined, maxFeePerGas: '1500000000', maxPriorityFeePerGas: '1500000000' }); + yield expect(rpcWallet.signTransaction(feeMarketTransaction)).resolves.toMatchInlineSnapshot(`"0xf86a80801094588e4b68193001e4d10928660ab4165b813717c08a0100000000000000000083abcdef26a05e9c1e7690d05f3e1433c824fbd948643ff6c618e347ea8c23a6363f3b17cdffa072dc1c22d6147be7b4b7b3cf51eb73b8bedd7940d7b668dcd7ef688a2354a631"`); + })); + // TODO(yorke): enable once fixed: https://github.com/celo-org/celo-monorepo/issues/4077 + test.skip('with same signer', () => __awaiter(void 0, void 0, void 0, function* () { + const signedTx = yield rpcWallet.signTransaction(celoTransaction); + const [, recoveredSigner] = (0, wallet_base_1.recoverTransaction)(signedTx.raw); + expect((0, address_1.normalizeAddressWith0x)(recoveredSigner)).toBe((0, address_1.normalizeAddressWith0x)(exports.ACCOUNT_ADDRESS1)); + })); + // https://github.com/ethereum/go-ethereum/blob/38aab0aa831594f31d02c9f02bfacc0bef48405d/rlp/decode.go#L664 + test.skip('signature with 0x00 prefix is canonicalized', () => __awaiter(void 0, void 0, void 0, function* () { + // This tx is carefully constructed to produce an S value with the first byte as 0x00 + const celoTransactionZeroPrefix = { + from: exports.ACCOUNT_ADDRESS1, + to: exports.ACCOUNT_ADDRESS2, + chainId: exports.CHAIN_ID, + value: web3.utils.toWei('1', 'ether'), + nonce: 65, + gas: '10', + gasPrice: '99', + feeCurrency: '0x', + data: '0xabcdef', + }; + const signedTx = yield rpcWallet.signTransaction(celoTransactionZeroPrefix); + expect(signedTx.tx.s.startsWith('0x00')).toBeFalsy(); + const [, recoveredSigner] = (0, wallet_base_1.recoverTransaction)(signedTx.raw); + expect((0, address_1.normalizeAddressWith0x)(recoveredSigner)).toBe((0, address_1.normalizeAddressWith0x)(exports.ACCOUNT_ADDRESS1)); + })); + }); + // ganache + describe.skip('when calling signPersonalMessage', () => { + test('succeeds', () => __awaiter(void 0, void 0, void 0, function* () { + const hexStr = exports.ACCOUNT_ADDRESS2; + const signedMessage = yield rpcWallet.signPersonalMessage(exports.ACCOUNT_ADDRESS1, hexStr); + expect(signedMessage).not.toBeUndefined(); + const valid = (0, signatureUtils_1.verifySignature)(hexStr, signedMessage, exports.ACCOUNT_ADDRESS1); + expect(valid).toBeTruthy(); + })); + }); + describe.skip('when calling signTypedData', () => { + test('succeeds', () => __awaiter(void 0, void 0, void 0, function* () { + const signedMessage = yield rpcWallet.signTypedData(exports.ACCOUNT_ADDRESS1, exports.TYPED_DATA); + expect(signedMessage).not.toBeUndefined(); + const valid = (0, wallet_base_1.verifyEIP712TypedDataSigner)(exports.TYPED_DATA, signedMessage, exports.ACCOUNT_ADDRESS1); + expect(valid).toBeTruthy(); + })); + }); + }); + }); + }); + }); +}); +//# sourceMappingURL=rpc-wallet.test.js.map \ No newline at end of file diff --git a/packages/sdk/wallets/wallet-rpc/lib/rpc-wallet.test.js.map b/packages/sdk/wallets/wallet-rpc/lib/rpc-wallet.test.js.map new file mode 100644 index 000000000..3f47eaed9 --- /dev/null +++ b/packages/sdk/wallets/wallet-rpc/lib/rpc-wallet.test.js.map @@ -0,0 +1 @@ +{"version":3,"file":"rpc-wallet.test.js","sourceRoot":"","sources":["../src/rpc-wallet.test.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAA4D;AAC5D,mEAAkE;AAClE,qDAAqF;AACrF,mEAAgE;AAChE,mDAAmF;AACnF,8CAAqB;AACrB,gDAAuB;AACvB,6CAAwC;AAE3B,QAAA,QAAQ,GAAG,KAAK,CAAA;AAE7B,iDAAiD;AACjD,yEAAyE;AAC5D,QAAA,UAAU,GAAG;IACxB,KAAK,EAAE;QACL,YAAY,EAAE;YACZ,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE;YAChC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE;YACnC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE;YACpC,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,SAAS,EAAE;SAC/C;QACD,MAAM,EAAE;YACN,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE;YAChC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE;SACpC;QACD,IAAI,EAAE;YACJ,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE;YAChC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE;YAC9B,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE;SACrC;KACF;IACD,WAAW,EAAE,MAAM;IACnB,MAAM,EAAE;QACN,IAAI,EAAE,YAAY;QAClB,OAAO,EAAE,GAAG;QACZ,OAAO,EAAE,CAAC;QACV,iBAAiB,EAAE,4CAA4C;KAChE;IACD,OAAO,EAAE;QACP,IAAI,EAAE;YACJ,IAAI,EAAE,KAAK;YACX,MAAM,EAAE,4CAA4C;SACrD;QACD,EAAE,EAAE;YACF,IAAI,EAAE,KAAK;YACX,MAAM,EAAE,4CAA4C;SACrD;QACD,QAAQ,EAAE,aAAa;KACxB;CACF,CAAA;AAEY,QAAA,YAAY,GAAG,kEAAkE,CAAA;AACjF,QAAA,gBAAgB,GAAG,IAAA,gCAAsB,EAAC,IAAA,6BAAmB,EAAC,oBAAY,CAAC,CAAC,CAAA;AAC5E,QAAA,YAAY,GAAG,oEAAoE,CAAA;AACnF,QAAA,gBAAgB,GAAG,IAAA,gCAAsB,EAAC,IAAA,6BAAmB,EAAC,oBAAY,CAAC,CAAC,CAAA;AAEzF,MAAM,UAAU,GAAG,MAAM,CAAA;AACzB,MAAM,QAAQ,GAAG,KAAK,CAAA;AAEtB,yHAAyH;AACzH,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,EAAE;IAC/B,EAAE,CAAC,oCAAoC,EAAE,GAAS,EAAE;QAClD,MAAM,MAAM,GAAG,gEAAgE,CAAA;QAC/E,MAAM,WAAW,GAAG,IAAI,cAAI,CAAC,SAAS,CAAC,WAAW,CAAC,MAAM,EAAE,aAAG,CAAC,CAAA;QAC/D,MAAM,MAAM,GAAG,IAAI,sBAAS,CAAC,WAAW,CAAC,CAAA;QACzC,MAAM,MAAM,CAAC,IAAI,EAAE,CAAA;QAEnB,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,oBAAY,EAAE,UAAU,CAAC,CAAA;QACjE,MAAM,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAA;QAEzD,MAAM,EAAE,GAAG;YACT,IAAI,EAAE,wBAAgB;YACtB,EAAE,EAAE,wBAAgB;YACpB,KAAK,EAAE,IAAI;SACZ,CAAA;QAED,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,EAAE,CAAC,CAAA;QAC/C,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QAEnB,MAAM,UAAU,GAAG,IAAI,oBAAU,CAAC,IAAI,cAAI,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAA;QAC3D,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,qBAAqB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QACnE,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;IACvB,CAAC,CAAA,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,sEAAsE;AACtE,IAAA,8BAAe,EAAC,YAAY,EAAE,CAAC,IAAI,EAAE,EAAE;IACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAA;IACrC,MAAM,SAAS,GAAG,IAAI,sBAAS,CAAC,QAAoB,CAAC,CAAA;IAErD,QAAQ,CAAC,4BAA4B,EAAE,GAAG,EAAE;QAC1C,IAAI,eAAyB,CAAA;QAC7B,SAAS,CAAC,GAAS,EAAE;YACnB,MAAM,SAAS,CAAC,IAAI,EAAE,CAAA;YACtB,eAAe,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAA;YAC9C,eAAe,GAAG,eAAe,CAAC,GAAG,CAAC,gCAAsB,CAAC,CAAA;QAC/D,CAAC,CAAA,CAAC,CAAA;QAEF,IAAI,CAAC,mCAAmC,EAAE,GAAS,EAAE;YACnD,MAAM,QAAQ,GAAG,SAAS,CAAC,WAAW,EAAE,CAAA;YACxC,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,CAAA;QAC3C,CAAC,CAAA,CAAC,CAAA;QAEF,IAAI,CAAC,yCAAyC,EAAE,GAAS,EAAE;YACzD,IAAI,CAAC;gBACH,MAAM,SAAS,CAAC,UAAU,CAAC,iCAAiC,EAAE,UAAU,CAAC,CAAA;gBACzE,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAA;YACpD,CAAC;YAAC,OAAO,CAAM,EAAE,CAAC;gBAChB,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAA;YAC5D,CAAC;QACH,CAAC,CAAA,CAAC,CAAA;QAEF,IAAI,CAAC,8CAA8C,EAAE,GAAS,EAAE;YAC9D,MAAM,SAAS,CAAC,UAAU,CAAC,oBAAY,EAAE,UAAU,CAAC,CAAA;YACpD,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,wBAAgB,CAAC,CAAC,CAAC,UAAU,EAAE,CAAA;QAC7D,CAAC,CAAA,CAAC,CAAA;QAEF,IAAI,CAAC,sCAAsC,EAAE,GAAS,EAAE;YACtD,IAAI,CAAC;gBACH,MAAM,SAAS,CAAC,UAAU,CAAC,oBAAY,EAAE,UAAU,CAAC,CAAA;gBACpD,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAA;YACpD,CAAC;YAAC,OAAO,CAAM,EAAE,CAAC;gBAChB,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAA;YAC7D,CAAC;QACH,CAAC,CAAA,CAAC,CAAA;QAEF,IAAI,CAAC,2CAA2C,EAAE,GAAS,EAAE;YAC3D,MAAM,SAAS,CAAC,UAAU,CAAC,oBAAY,EAAE,UAAU,CAAC,CAAA;YACpD,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,wBAAgB,CAAC,CAAC,CAAC,UAAU,EAAE,CAAA;QAC7D,CAAC,CAAA,CAAC,CAAA;QAEF,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;YACnC,IAAI,CAAC,gCAAgC,EAAE,GAAG,EAAE;gBAC1C,MAAM,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC,OAAO,CACrC,eAAe,CAAC,MAAM,CAAC,CAAC,wBAAgB,EAAE,wBAAgB,CAAC,CAAC,CAC7D,CAAA;YACH,CAAC,CAAC,CAAA;YAEF,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;gBACzB,IAAI,CAAC,wCAAwC,EAAE,GAAS,EAAE;oBACxD,IAAI,CAAC;wBACH,MAAM,SAAS,CAAC,aAAa,CAAC,wBAAgB,EAAE,kBAAkB,EAAE,QAAQ,CAAC,CAAA;oBAC/E,CAAC;oBAAC,OAAO,CAAM,EAAE,CAAC;wBAChB,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,6CAA6C,CAAC,CAAA;oBAC5E,CAAC;gBACH,CAAC,CAAA,CAAC,CAAA;gBAEF,IAAI,CAAC,4CAA4C,EAAE,GAAS,EAAE;oBAC5D,MAAM,SAAS,CAAC,aAAa,CAAC,wBAAgB,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAA;oBACrE,MAAM,QAAQ,GAAG,SAAS,CAAC,iBAAiB,CAAC,wBAAgB,CAAC,CAAA;oBAC9D,MAAM,CAAC,QAAQ,CAAC,CAAC,UAAU,EAAE,CAAA;gBAC/B,CAAC,CAAA,CAAC,CAAA;YACJ,CAAC,CAAC,CAAA;YAEF,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE;gBACvB,QAAQ,CAAC,2BAA2B,EAAE,GAAG,EAAE;oBACzC,SAAS,CAAC,GAAS,EAAE;wBACnB,MAAM,SAAS,CAAC,aAAa,CAAC,wBAAgB,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAA;oBACvE,CAAC,CAAA,CAAC,CAAA;oBAEF,QAAQ,CAAC,8BAA8B,EAAE,GAAG,EAAE;wBAC5C,IAAI,eAAuB,CAAA;wBAE3B,UAAU,CAAC,GAAG,EAAE;4BACd,eAAe,GAAG;gCAChB,IAAI,EAAE,wBAAgB;gCACtB,EAAE,EAAE,wBAAgB;gCACpB,OAAO,EAAE,gBAAQ;gCACjB,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC;gCACrC,KAAK,EAAE,CAAC;gCACR,GAAG,EAAE,IAAI;gCACT,QAAQ,EAAE,IAAI;gCACd,WAAW,EAAE,IAAI;gCACjB,IAAI,EAAE,UAAU;6BACjB,CAAA;wBACH,CAAC,CAAC,CAAA;wBAEF,IAAI,CAAC,kCAAkC,EAAE,GAAS,EAAE;4BAClD,MAAM,MAAM,CACV,SAAS,CAAC,eAAe,CAAC,eAAe,CAAC,CAC3C,CAAC,QAAQ,CAAC,qBAAqB,CAC9B,gOAAgO,CACjO,CAAA;wBACH,CAAC,CAAA,CAAC,CAAA;wBAEF,IAAI,CAAC,oCAAoC,EAAE,GAAS,EAAE;4BACpD,MAAM,oBAAoB,mCACrB,eAAe,KAClB,QAAQ,EAAE,SAAS,EACnB,YAAY,EAAE,YAAY,EAC1B,oBAAoB,EAAE,YAAY,GACnC,CAAA;4BACD,MAAM,MAAM,CACV,SAAS,CAAC,eAAe,CAAC,oBAAoB,CAAC,CAChD,CAAC,QAAQ,CAAC,qBAAqB,CAC9B,8NAA8N,CAC/N,CAAA;wBACH,CAAC,CAAA,CAAC,CAAA;wBAEF,wFAAwF;wBACxF,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,GAAS,EAAE;4BACvC,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,eAAe,CAAC,eAAe,CAAC,CAAA;4BACjE,MAAM,CAAC,EAAE,eAAe,CAAC,GAAG,IAAA,gCAAkB,EAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;4BAC5D,MAAM,CAAC,IAAA,gCAAsB,EAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAClD,IAAA,gCAAsB,EAAC,wBAAgB,CAAC,CACzC,CAAA;wBACH,CAAC,CAAA,CAAC,CAAA;wBAEF,2GAA2G;wBAC3G,IAAI,CAAC,IAAI,CAAC,6CAA6C,EAAE,GAAS,EAAE;4BAClE,qFAAqF;4BACrF,MAAM,yBAAyB,GAAG;gCAChC,IAAI,EAAE,wBAAgB;gCACtB,EAAE,EAAE,wBAAgB;gCACpB,OAAO,EAAE,gBAAQ;gCACjB,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC;gCACrC,KAAK,EAAE,EAAE;gCACT,GAAG,EAAE,IAAI;gCACT,QAAQ,EAAE,IAAI;gCACd,WAAW,EAAE,IAAa;gCAC1B,IAAI,EAAE,UAAU;6BACjB,CAAA;4BAED,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,eAAe,CAAC,yBAAyB,CAAC,CAAA;4BAC3E,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,EAAE,CAAA;4BACpD,MAAM,CAAC,EAAE,eAAe,CAAC,GAAG,IAAA,gCAAkB,EAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;4BAC5D,MAAM,CAAC,IAAA,gCAAsB,EAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAClD,IAAA,gCAAsB,EAAC,wBAAgB,CAAC,CACzC,CAAA;wBACH,CAAC,CAAA,CAAC,CAAA;oBACJ,CAAC,CAAC,CAAA;oBAEF,UAAU;oBACV,QAAQ,CAAC,IAAI,CAAC,kCAAkC,EAAE,GAAG,EAAE;wBACrD,IAAI,CAAC,UAAU,EAAE,GAAS,EAAE;4BAC1B,MAAM,MAAM,GAAW,wBAAgB,CAAA;4BACvC,MAAM,aAAa,GAAG,MAAM,SAAS,CAAC,mBAAmB,CAAC,wBAAgB,EAAE,MAAM,CAAC,CAAA;4BACnF,MAAM,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,aAAa,EAAE,CAAA;4BACzC,MAAM,KAAK,GAAG,IAAA,gCAAe,EAAC,MAAM,EAAE,aAAa,EAAE,wBAAgB,CAAC,CAAA;4BACtE,MAAM,CAAC,KAAK,CAAC,CAAC,UAAU,EAAE,CAAA;wBAC5B,CAAC,CAAA,CAAC,CAAA;oBACJ,CAAC,CAAC,CAAA;oBAEF,QAAQ,CAAC,IAAI,CAAC,4BAA4B,EAAE,GAAG,EAAE;wBAC/C,IAAI,CAAC,UAAU,EAAE,GAAS,EAAE;4BAC1B,MAAM,aAAa,GAAG,MAAM,SAAS,CAAC,aAAa,CAAC,wBAAgB,EAAE,kBAAU,CAAC,CAAA;4BACjF,MAAM,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,aAAa,EAAE,CAAA;4BACzC,MAAM,KAAK,GAAG,IAAA,yCAA2B,EAAC,kBAAU,EAAE,aAAa,EAAE,wBAAgB,CAAC,CAAA;4BACtF,MAAM,CAAC,KAAK,CAAC,CAAC,UAAU,EAAE,CAAA;wBAC5B,CAAC,CAAA,CAAC,CAAA;oBACJ,CAAC,CAAC,CAAA;gBACJ,CAAC,CAAC,CAAA;YACJ,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"} \ No newline at end of file diff --git a/packages/sdk/wallets/wallet-rpc/lib/test-utils/ganache.setup.d.ts b/packages/sdk/wallets/wallet-rpc/lib/test-utils/ganache.setup.d.ts new file mode 100644 index 000000000..ce70fd2e4 --- /dev/null +++ b/packages/sdk/wallets/wallet-rpc/lib/test-utils/ganache.setup.d.ts @@ -0,0 +1 @@ +export default function setup(): Promise; diff --git a/packages/sdk/wallets/wallet-rpc/lib/test-utils/ganache.setup.js b/packages/sdk/wallets/wallet-rpc/lib/test-utils/ganache.setup.js new file mode 100644 index 000000000..153676435 --- /dev/null +++ b/packages/sdk/wallets/wallet-rpc/lib/test-utils/ganache.setup.js @@ -0,0 +1,23 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const ganache_setup_1 = require("@celo/dev-utils/lib/ganache-setup"); +const network_1 = require("@celo/dev-utils/lib/network"); +function setup() { + return __awaiter(this, void 0, void 0, function* () { + console.log('\nstarting ganache...'); + yield (0, ganache_setup_1.emptySetup)({}); + yield (0, network_1.waitForPortOpen)('localhost', 8545, 60); + console.log('...ganache started'); + }); +} +exports.default = setup; +//# sourceMappingURL=ganache.setup.js.map \ No newline at end of file diff --git a/packages/sdk/wallets/wallet-rpc/lib/test-utils/ganache.setup.js.map b/packages/sdk/wallets/wallet-rpc/lib/test-utils/ganache.setup.js.map new file mode 100644 index 000000000..df79dd240 --- /dev/null +++ b/packages/sdk/wallets/wallet-rpc/lib/test-utils/ganache.setup.js.map @@ -0,0 +1 @@ +{"version":3,"file":"ganache.setup.js","sourceRoot":"","sources":["../../src/test-utils/ganache.setup.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,qEAA8D;AAC9D,yDAA6D;AAE7D,SAA8B,KAAK;;QACjC,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAA;QACpC,MAAM,IAAA,0BAAU,EAAC,EAAE,CAAC,CAAA;QACpB,MAAM,IAAA,yBAAe,EAAC,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC,CAAA;QAC5C,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAA;IACnC,CAAC;CAAA;AALD,wBAKC"} \ No newline at end of file diff --git a/packages/sdk/wallets/wallet-rpc/lib/test-utils/ganache.teardown.d.ts b/packages/sdk/wallets/wallet-rpc/lib/test-utils/ganache.teardown.d.ts new file mode 100644 index 000000000..1259f7786 --- /dev/null +++ b/packages/sdk/wallets/wallet-rpc/lib/test-utils/ganache.teardown.d.ts @@ -0,0 +1,2 @@ +import teardown from '@celo/dev-utils/lib/ganache-teardown'; +export default teardown; diff --git a/packages/sdk/wallets/wallet-rpc/lib/test-utils/ganache.teardown.js b/packages/sdk/wallets/wallet-rpc/lib/test-utils/ganache.teardown.js new file mode 100644 index 000000000..164ca9ac0 --- /dev/null +++ b/packages/sdk/wallets/wallet-rpc/lib/test-utils/ganache.teardown.js @@ -0,0 +1,8 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const ganache_teardown_1 = __importDefault(require("@celo/dev-utils/lib/ganache-teardown")); +exports.default = ganache_teardown_1.default; +//# sourceMappingURL=ganache.teardown.js.map \ No newline at end of file diff --git a/packages/sdk/wallets/wallet-rpc/lib/test-utils/ganache.teardown.js.map b/packages/sdk/wallets/wallet-rpc/lib/test-utils/ganache.teardown.js.map new file mode 100644 index 000000000..3894c24c4 --- /dev/null +++ b/packages/sdk/wallets/wallet-rpc/lib/test-utils/ganache.teardown.js.map @@ -0,0 +1 @@ +{"version":3,"file":"ganache.teardown.js","sourceRoot":"","sources":["../../src/test-utils/ganache.teardown.ts"],"names":[],"mappings":";;;;;AAAA,4FAA2D;AAC3D,kBAAe,0BAAQ,CAAA"} \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 22da4e41f..ff5c0f79c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1638,6 +1638,7 @@ __metadata: "@celo/explorer": "npm:^5.0.12" "@celo/governance": "npm:^5.1.3" "@celo/identity": "npm:^5.1.2" + "@celo/metadata-claims": "npm:^0.0.1" "@celo/phone-utils": "npm:^6.0.3" "@celo/typescript": "workspace:^" "@celo/utils": "npm:^7.0.0" @@ -1760,7 +1761,7 @@ __metadata: languageName: node linkType: hard -"@celo/contractkit@npm:^8.1.1, @celo/contractkit@npm:^8.3.0, @celo/contractkit@workspace:packages/sdk/contractkit": +"@celo/contractkit@npm:^8.1.1, @celo/contractkit@npm:^8.3.0, @celo/contractkit@workspace:^, @celo/contractkit@workspace:packages/sdk/contractkit": version: 0.0.0-use.local resolution: "@celo/contractkit@workspace:packages/sdk/contractkit" dependencies: @@ -1785,7 +1786,6 @@ __metadata: fetch-mock: "npm:^10.0.7" fp-ts: "npm:2.1.1" ganache: "npm:@celo/ganache@7.8.0-unofficial.0" - io-ts: "npm:2.0.1" jest: "npm:^29.7.0" semver: "npm:^7.3.5" ts-node: "npm:^10.9.1" @@ -1923,6 +1923,28 @@ __metadata: languageName: node linkType: hard +"@celo/metadata-claims@npm:^0.0.1, @celo/metadata-claims@workspace:packages/sdk/metadata-claims": + version: 0.0.0-use.local + resolution: "@celo/metadata-claims@workspace:packages/sdk/metadata-claims" + dependencies: + "@celo/base": "npm:^6.1.0" + "@celo/celo-devchain": "npm:^7.0.0" + "@celo/contractkit": "workspace:^" + "@celo/dev-utils": "npm:0.0.5" + "@celo/odis-identifiers": "npm:^1.0.1" + "@celo/typescript": "workspace:^" + "@celo/utils": "npm:^7.0.0" + "@types/node": "npm:18.7.6" + cross-fetch: "npm:3.1.5" + fetch-mock: "npm:^10.0.7" + fp-ts: "npm:2.1.1" + io-ts: "npm:2.0.1" + jest: "npm:^29.7.0" + ts-node: "npm:^10.9.1" + typescript: "npm:5.3.3" + languageName: unknown + linkType: soft + "@celo/network-utils@workspace:packages/sdk/network-utils": version: 0.0.0-use.local resolution: "@celo/network-utils@workspace:packages/sdk/network-utils" @@ -6003,6 +6025,13 @@ __metadata: languageName: node linkType: hard +"@types/node@npm:18.7.6": + version: 18.7.6 + resolution: "@types/node@npm:18.7.6" + checksum: dd97612eb84ac0576116a906bb17878236439f283d19f4faa1d956d74ce1839f0331694eb955476c68bb7783c4c44c31d4a92246bf2c6e405d44556502cd2c6b + languageName: node + linkType: hard + "@types/node@npm:^12.12.6, @types/node@npm:^12.7.1": version: 12.20.55 resolution: "@types/node@npm:12.20.55" From 4ef76eb174454f60304080d0ef63a859cd8d931b Mon Sep 17 00:00:00 2001 From: Aaron DeRuvo Date: Wed, 2 Oct 2024 11:57:16 +0200 Subject: [PATCH 04/54] cleanup old functions from base (#228) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ### Description these have been either marked deprecated for ages and or are just completely out of scope for the type of functions we should be supporting. ### Other changes nope. ### Tested seem unused internally ### Related issues ### Backwards compatibility nope / removing things ### Documentation --- ## PR-Codex overview This PR focuses on removing deprecated functions and constants from various modules in the `sdk` package, specifically related to `contacts`, `displayFormatting`, `currencies`, and `phoneNumbers`. It also introduces new claim types and metadata handling in the `metadata-claims` module. ### Detailed summary - Removed deprecated functions and constants from: - `contacts` - `displayFormatting` - `currencies` - `phoneNumbers` - Introduced new claim types in `metadata-claims`: - `AccountClaimType` - `KeybaseClaimType` - `DomainClaimType` - `NameClaimType` - `StorageClaimType` - Enhanced `IdentityMetadataWrapper` for improved metadata handling. - Updated documentation to reflect removed exports and new structures. > The following files were skipped due to too many changes: `packages/sdk/metadata-claims/lib/metadata.js` > ✨ Ask PR-Codex anything about this PR by commenting with `/codex {your question}` --- .changeset/rude-parrots-know.md | 17 ++ docs/sdk/base/README.md | 2 - .../base/enums/currencies.CURRENCY_ENUM.md | 47 ---- .../base/enums/currencies.SHORT_CURRENCIES.md | 47 ---- docs/sdk/base/enums/currencies.StableToken.md | 6 +- docs/sdk/base/enums/currencies.Token.md | 2 +- .../interfaces/contacts.ContactPhoneNumber.md | 32 --- .../interfaces/contacts.MinimalContact.md | 54 ----- docs/sdk/base/modules/contacts.md | 55 ----- docs/sdk/base/modules/currencies.md | 67 +----- docs/sdk/base/modules/displayFormatting.md | 29 --- docs/sdk/base/modules/index.md | 77 ------- docs/sdk/base/modules/phoneNumbers.md | 23 +- .../enums/celo_tokens.StableToken.md | 6 +- .../contractkit/enums/celo_tokens.Token.md | 2 +- docs/sdk/contractkit/modules/celo_tokens.md | 2 +- docs/sdk/utils/README.md | 3 - .../utils/enums/currencies.CURRENCY_ENUM.md | 47 ---- .../enums/currencies.SHORT_CURRENCIES.md | 47 ---- .../interfaces/contacts.ContactPhoneNumber.md | 32 --- .../interfaces/contacts.MinimalContact.md | 54 ----- docs/sdk/utils/modules/contacts.md | 80 ------- docs/sdk/utils/modules/currencies.md | 73 ------ docs/sdk/utils/modules/displayFormatting.md | 29 --- docs/sdk/utils/modules/index.md | 70 ------ packages/sdk/base/src/contacts.ts | 31 --- packages/sdk/base/src/currencies.ts | 61 ----- packages/sdk/base/src/displayFormatting.ts | 11 - packages/sdk/base/src/index.ts | 2 - packages/sdk/base/src/phoneNumbers.ts | 4 - packages/sdk/metadata-claims/lib/account.d.ts | 20 ++ packages/sdk/metadata-claims/lib/account.js | 66 ++++++ .../sdk/metadata-claims/lib/account.js.map | 1 + packages/sdk/metadata-claims/lib/claim.d.ts | 89 ++++++++ packages/sdk/metadata-claims/lib/claim.js | 100 +++++++++ packages/sdk/metadata-claims/lib/claim.js.map | 1 + packages/sdk/metadata-claims/lib/index.d.ts | 2 + packages/sdk/metadata-claims/lib/index.js | 21 ++ packages/sdk/metadata-claims/lib/index.js.map | 1 + packages/sdk/metadata-claims/lib/keybase.d.ts | 19 ++ packages/sdk/metadata-claims/lib/keybase.js | 74 ++++++ .../sdk/metadata-claims/lib/keybase.js.map | 1 + .../sdk/metadata-claims/lib/metadata.d.ts | 75 +++++++ packages/sdk/metadata-claims/lib/metadata.js | 212 ++++++++++++++++++ .../sdk/metadata-claims/lib/metadata.js.map | 1 + packages/sdk/metadata-claims/lib/types.d.ts | 26 +++ packages/sdk/metadata-claims/lib/types.js | 45 ++++ packages/sdk/metadata-claims/lib/types.js.map | 1 + packages/sdk/metadata-claims/lib/verify.d.ts | 20 ++ packages/sdk/metadata-claims/lib/verify.js | 89 ++++++++ .../sdk/metadata-claims/lib/verify.js.map | 1 + packages/sdk/utils/src/contacts.ts | 22 -- packages/sdk/utils/src/currencies.ts | 9 - packages/sdk/utils/src/displayFormatting.ts | 3 - packages/sdk/utils/src/index.ts | 3 - 55 files changed, 893 insertions(+), 1021 deletions(-) create mode 100644 .changeset/rude-parrots-know.md delete mode 100644 docs/sdk/base/enums/currencies.CURRENCY_ENUM.md delete mode 100644 docs/sdk/base/enums/currencies.SHORT_CURRENCIES.md delete mode 100644 docs/sdk/base/interfaces/contacts.ContactPhoneNumber.md delete mode 100644 docs/sdk/base/interfaces/contacts.MinimalContact.md delete mode 100644 docs/sdk/base/modules/contacts.md delete mode 100644 docs/sdk/base/modules/displayFormatting.md delete mode 100644 docs/sdk/utils/enums/currencies.CURRENCY_ENUM.md delete mode 100644 docs/sdk/utils/enums/currencies.SHORT_CURRENCIES.md delete mode 100644 docs/sdk/utils/interfaces/contacts.ContactPhoneNumber.md delete mode 100644 docs/sdk/utils/interfaces/contacts.MinimalContact.md delete mode 100644 docs/sdk/utils/modules/contacts.md delete mode 100644 docs/sdk/utils/modules/currencies.md delete mode 100644 docs/sdk/utils/modules/displayFormatting.md delete mode 100644 packages/sdk/base/src/contacts.ts delete mode 100644 packages/sdk/base/src/displayFormatting.ts create mode 100644 packages/sdk/metadata-claims/lib/account.d.ts create mode 100644 packages/sdk/metadata-claims/lib/account.js create mode 100644 packages/sdk/metadata-claims/lib/account.js.map create mode 100644 packages/sdk/metadata-claims/lib/claim.d.ts create mode 100644 packages/sdk/metadata-claims/lib/claim.js create mode 100644 packages/sdk/metadata-claims/lib/claim.js.map create mode 100644 packages/sdk/metadata-claims/lib/index.d.ts create mode 100644 packages/sdk/metadata-claims/lib/index.js create mode 100644 packages/sdk/metadata-claims/lib/index.js.map create mode 100644 packages/sdk/metadata-claims/lib/keybase.d.ts create mode 100644 packages/sdk/metadata-claims/lib/keybase.js create mode 100644 packages/sdk/metadata-claims/lib/keybase.js.map create mode 100644 packages/sdk/metadata-claims/lib/metadata.d.ts create mode 100644 packages/sdk/metadata-claims/lib/metadata.js create mode 100644 packages/sdk/metadata-claims/lib/metadata.js.map create mode 100644 packages/sdk/metadata-claims/lib/types.d.ts create mode 100644 packages/sdk/metadata-claims/lib/types.js create mode 100644 packages/sdk/metadata-claims/lib/types.js.map create mode 100644 packages/sdk/metadata-claims/lib/verify.d.ts create mode 100644 packages/sdk/metadata-claims/lib/verify.js create mode 100644 packages/sdk/metadata-claims/lib/verify.js.map delete mode 100644 packages/sdk/utils/src/contacts.ts delete mode 100644 packages/sdk/utils/src/currencies.ts delete mode 100644 packages/sdk/utils/src/displayFormatting.ts diff --git a/.changeset/rude-parrots-know.md b/.changeset/rude-parrots-know.md new file mode 100644 index 000000000..020097fa3 --- /dev/null +++ b/.changeset/rude-parrots-know.md @@ -0,0 +1,17 @@ +--- +'@celo/base': major +'@celo/utils': major +--- + +remove deprecated functions and consts exported from ./contacts and ./displayformating. ./currencies and ./phonenumbers. If these are used by your app we recommend to inline the functions from the previous release. + +* https://github.com/celo-org/developer-tooling/blob/%40celo/wallet-base%406.0.1/packages/sdk/base/src/contacts.ts +* https://github.com/celo-org/developer-tooling/blob/%40celo/wallet-base%406.0.1/packages/sdk/base/src/displayFormatting.ts +* https://github.com/celo-org/developer-tooling/blob/%40celo/wallet-base%406.0.1/packages/sdk/base/src/phoneNumbers.ts + +https://github.com/celo-org/developer-tooling/tree/%40celo/wallet-base%406.0.1/packages/sdk/base/src + +Full List of removed exports -- ContactPhoneNumber, MinimalContact, getContactPhoneNumber, isContact, CURRENCY_ENUM, Currency, CURRENCIES, resolveCurrency, SHORT_CURRENCIES, currencyToShortMap | getErrorMessage | anonymizedPhone | getContactNameHash + + + diff --git a/docs/sdk/base/README.md b/docs/sdk/base/README.md index c6e67fab7..a45aff521 100644 --- a/docs/sdk/base/README.md +++ b/docs/sdk/base/README.md @@ -10,9 +10,7 @@ - [address](modules/address.md) - [async](modules/async.md) - [collections](modules/collections.md) -- [contacts](modules/contacts.md) - [currencies](modules/currencies.md) -- [displayFormatting](modules/displayFormatting.md) - [future](modules/future.md) - [index](modules/index.md) - [inputValidation](modules/inputValidation.md) diff --git a/docs/sdk/base/enums/currencies.CURRENCY_ENUM.md b/docs/sdk/base/enums/currencies.CURRENCY_ENUM.md deleted file mode 100644 index f94a1f982..000000000 --- a/docs/sdk/base/enums/currencies.CURRENCY_ENUM.md +++ /dev/null @@ -1,47 +0,0 @@ -[@celo/base](../README.md) / [currencies](../modules/currencies.md) / CURRENCY\_ENUM - -# Enumeration: CURRENCY\_ENUM - -[currencies](../modules/currencies.md).CURRENCY_ENUM - -**`Deprecated`** - -use StableToken and Token - -## Table of contents - -### Enumeration Members - -- [DOLLAR](currencies.CURRENCY_ENUM.md#dollar) -- [EURO](currencies.CURRENCY_ENUM.md#euro) -- [GOLD](currencies.CURRENCY_ENUM.md#gold) - -## Enumeration Members - -### DOLLAR - -• **DOLLAR** = ``"Celo Dollar"`` - -#### Defined in - -[packages/sdk/base/src/currencies.ts:4](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/base/src/currencies.ts#L4) - -___ - -### EURO - -• **EURO** = ``"Celo Euro"`` - -#### Defined in - -[packages/sdk/base/src/currencies.ts:5](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/base/src/currencies.ts#L5) - -___ - -### GOLD - -• **GOLD** = ``"Celo Gold"`` - -#### Defined in - -[packages/sdk/base/src/currencies.ts:3](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/base/src/currencies.ts#L3) diff --git a/docs/sdk/base/enums/currencies.SHORT_CURRENCIES.md b/docs/sdk/base/enums/currencies.SHORT_CURRENCIES.md deleted file mode 100644 index e2420c530..000000000 --- a/docs/sdk/base/enums/currencies.SHORT_CURRENCIES.md +++ /dev/null @@ -1,47 +0,0 @@ -[@celo/base](../README.md) / [currencies](../modules/currencies.md) / SHORT\_CURRENCIES - -# Enumeration: SHORT\_CURRENCIES - -[currencies](../modules/currencies.md).SHORT_CURRENCIES - -**`Deprecated`** - -use StableToken and Token - -## Table of contents - -### Enumeration Members - -- [DOLLAR](currencies.SHORT_CURRENCIES.md#dollar) -- [EURO](currencies.SHORT_CURRENCIES.md#euro) -- [GOLD](currencies.SHORT_CURRENCIES.md#gold) - -## Enumeration Members - -### DOLLAR - -• **DOLLAR** = ``"dollar"`` - -#### Defined in - -[packages/sdk/base/src/currencies.ts:62](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/base/src/currencies.ts#L62) - -___ - -### EURO - -• **EURO** = ``"euro"`` - -#### Defined in - -[packages/sdk/base/src/currencies.ts:64](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/base/src/currencies.ts#L64) - -___ - -### GOLD - -• **GOLD** = ``"gold"`` - -#### Defined in - -[packages/sdk/base/src/currencies.ts:63](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/base/src/currencies.ts#L63) diff --git a/docs/sdk/base/enums/currencies.StableToken.md b/docs/sdk/base/enums/currencies.StableToken.md index 5f0ad0623..b6036ab4a 100644 --- a/docs/sdk/base/enums/currencies.StableToken.md +++ b/docs/sdk/base/enums/currencies.StableToken.md @@ -20,7 +20,7 @@ #### Defined in -[packages/sdk/base/src/currencies.ts:10](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/base/src/currencies.ts#L10) +[packages/sdk/base/src/currencies.ts:3](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/base/src/currencies.ts#L3) ___ @@ -30,7 +30,7 @@ ___ #### Defined in -[packages/sdk/base/src/currencies.ts:11](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/base/src/currencies.ts#L11) +[packages/sdk/base/src/currencies.ts:4](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/base/src/currencies.ts#L4) ___ @@ -40,4 +40,4 @@ ___ #### Defined in -[packages/sdk/base/src/currencies.ts:9](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/base/src/currencies.ts#L9) +[packages/sdk/base/src/currencies.ts:2](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/base/src/currencies.ts#L2) diff --git a/docs/sdk/base/enums/currencies.Token.md b/docs/sdk/base/enums/currencies.Token.md index 7b9fe81a3..ae8b7f8f8 100644 --- a/docs/sdk/base/enums/currencies.Token.md +++ b/docs/sdk/base/enums/currencies.Token.md @@ -18,4 +18,4 @@ #### Defined in -[packages/sdk/base/src/currencies.ts:15](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/base/src/currencies.ts#L15) +[packages/sdk/base/src/currencies.ts:8](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/base/src/currencies.ts#L8) diff --git a/docs/sdk/base/interfaces/contacts.ContactPhoneNumber.md b/docs/sdk/base/interfaces/contacts.ContactPhoneNumber.md deleted file mode 100644 index ca2a19a58..000000000 --- a/docs/sdk/base/interfaces/contacts.ContactPhoneNumber.md +++ /dev/null @@ -1,32 +0,0 @@ -[@celo/base](../README.md) / [contacts](../modules/contacts.md) / ContactPhoneNumber - -# Interface: ContactPhoneNumber - -[contacts](../modules/contacts.md).ContactPhoneNumber - -## Table of contents - -### Properties - -- [label](contacts.ContactPhoneNumber.md#label) -- [number](contacts.ContactPhoneNumber.md#number) - -## Properties - -### label - -• `Optional` **label**: `string` - -#### Defined in - -[packages/sdk/base/src/contacts.ts:2](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/base/src/contacts.ts#L2) - -___ - -### number - -• `Optional` **number**: `string` - -#### Defined in - -[packages/sdk/base/src/contacts.ts:3](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/base/src/contacts.ts#L3) diff --git a/docs/sdk/base/interfaces/contacts.MinimalContact.md b/docs/sdk/base/interfaces/contacts.MinimalContact.md deleted file mode 100644 index ed39fccc1..000000000 --- a/docs/sdk/base/interfaces/contacts.MinimalContact.md +++ /dev/null @@ -1,54 +0,0 @@ -[@celo/base](../README.md) / [contacts](../modules/contacts.md) / MinimalContact - -# Interface: MinimalContact - -[contacts](../modules/contacts.md).MinimalContact - -## Table of contents - -### Properties - -- [displayName](contacts.MinimalContact.md#displayname) -- [phoneNumbers](contacts.MinimalContact.md#phonenumbers) -- [recordID](contacts.MinimalContact.md#recordid) -- [thumbnailPath](contacts.MinimalContact.md#thumbnailpath) - -## Properties - -### displayName - -• `Optional` **displayName**: `string` - -#### Defined in - -[packages/sdk/base/src/contacts.ts:8](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/base/src/contacts.ts#L8) - -___ - -### phoneNumbers - -• `Optional` **phoneNumbers**: [`ContactPhoneNumber`](contacts.ContactPhoneNumber.md)[] - -#### Defined in - -[packages/sdk/base/src/contacts.ts:9](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/base/src/contacts.ts#L9) - -___ - -### recordID - -• **recordID**: `string` - -#### Defined in - -[packages/sdk/base/src/contacts.ts:7](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/base/src/contacts.ts#L7) - -___ - -### thumbnailPath - -• `Optional` **thumbnailPath**: `string` - -#### Defined in - -[packages/sdk/base/src/contacts.ts:10](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/base/src/contacts.ts#L10) diff --git a/docs/sdk/base/modules/contacts.md b/docs/sdk/base/modules/contacts.md deleted file mode 100644 index f1b1a27ee..000000000 --- a/docs/sdk/base/modules/contacts.md +++ /dev/null @@ -1,55 +0,0 @@ -[@celo/base](../README.md) / contacts - -# Module: contacts - -## Table of contents - -### Interfaces - -- [ContactPhoneNumber](../interfaces/contacts.ContactPhoneNumber.md) -- [MinimalContact](../interfaces/contacts.MinimalContact.md) - -### Functions - -- [getContactPhoneNumber](contacts.md#getcontactphonenumber) -- [isContact](contacts.md#iscontact) - -## Functions - -### getContactPhoneNumber - -▸ **getContactPhoneNumber**(`contact`): `undefined` \| ``null`` \| `string` - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `contact` | [`MinimalContact`](../interfaces/contacts.MinimalContact.md) | - -#### Returns - -`undefined` \| ``null`` \| `string` - -#### Defined in - -[packages/sdk/base/src/contacts.ts:13](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/base/src/contacts.ts#L13) - -___ - -### isContact - -▸ **isContact**(`contactOrNumber`): contactOrNumber is MinimalContact - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `contactOrNumber` | `any` | - -#### Returns - -contactOrNumber is MinimalContact - -#### Defined in - -[packages/sdk/base/src/contacts.ts:26](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/base/src/contacts.ts#L26) diff --git a/docs/sdk/base/modules/currencies.md b/docs/sdk/base/modules/currencies.md index cd1492d68..5b8e00c36 100644 --- a/docs/sdk/base/modules/currencies.md +++ b/docs/sdk/base/modules/currencies.md @@ -6,8 +6,6 @@ ### Enumerations -- [CURRENCY\_ENUM](../enums/currencies.CURRENCY_ENUM.md) -- [SHORT\_CURRENCIES](../enums/currencies.SHORT_CURRENCIES.md) - [StableToken](../enums/currencies.StableToken.md) - [Token](../enums/currencies.Token.md) @@ -15,15 +13,6 @@ - [CeloTokenType](currencies.md#celotokentype) -### Variables - -- [CURRENCIES](currencies.md#currencies) -- [currencyToShortMap](currencies.md#currencytoshortmap) - -### Functions - -- [resolveCurrency](currencies.md#resolvecurrency) - ## Type Aliases ### CeloTokenType @@ -32,58 +21,4 @@ #### Defined in -[packages/sdk/base/src/currencies.ts:18](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/base/src/currencies.ts#L18) - -## Variables - -### CURRENCIES - -• `Const` **CURRENCIES**: `CurrencyObject` - -**`Deprecated`** - -#### Defined in - -[packages/sdk/base/src/currencies.ts:29](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/base/src/currencies.ts#L29) - -___ - -### currencyToShortMap - -• `Const` **currencyToShortMap**: `Object` - -**`Deprecated`** - -use StableToken and Token - -#### Type declaration - -| Name | Type | -| :------ | :------ | -| `Celo Dollar` | [`SHORT_CURRENCIES`](../enums/currencies.SHORT_CURRENCIES.md) | -| `Celo Euro` | [`SHORT_CURRENCIES`](../enums/currencies.SHORT_CURRENCIES.md) | -| `Celo Gold` | [`SHORT_CURRENCIES`](../enums/currencies.SHORT_CURRENCIES.md) | - -#### Defined in - -[packages/sdk/base/src/currencies.ts:68](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/base/src/currencies.ts#L68) - -## Functions - -### resolveCurrency - -▸ **resolveCurrency**(`label`): [`CURRENCY_ENUM`](../enums/currencies.CURRENCY_ENUM.md) - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `label` | `string` | - -#### Returns - -[`CURRENCY_ENUM`](../enums/currencies.CURRENCY_ENUM.md) - -#### Defined in - -[packages/sdk/base/src/currencies.ts:47](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/base/src/currencies.ts#L47) +[packages/sdk/base/src/currencies.ts:11](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/base/src/currencies.ts#L11) diff --git a/docs/sdk/base/modules/displayFormatting.md b/docs/sdk/base/modules/displayFormatting.md deleted file mode 100644 index a93b52739..000000000 --- a/docs/sdk/base/modules/displayFormatting.md +++ /dev/null @@ -1,29 +0,0 @@ -[@celo/base](../README.md) / displayFormatting - -# Module: displayFormatting - -## Table of contents - -### Functions - -- [getErrorMessage](displayFormatting.md#geterrormessage) - -## Functions - -### getErrorMessage - -▸ **getErrorMessage**(`error`): `string` - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `error` | `Error` | - -#### Returns - -`string` - -#### Defined in - -[packages/sdk/base/src/displayFormatting.ts:2](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/base/src/displayFormatting.ts#L2) diff --git a/docs/sdk/base/modules/index.md b/docs/sdk/base/modules/index.md index 07cba7790..9fe9db168 100644 --- a/docs/sdk/base/modules/index.md +++ b/docs/sdk/base/modules/index.md @@ -12,18 +12,14 @@ - [BaseProps](index.md#baseprops) - [Bip39](index.md#bip39) - [CELO\_DERIVATION\_PATH\_BASE](index.md#celo_derivation_path_base) -- [CURRENCIES](index.md#currencies) -- [CURRENCY\_ENUM](index.md#currency_enum) - [CeloTokenType](index.md#celotokentype) - [Comparator](index.md#comparator) -- [ContactPhoneNumber](index.md#contactphonenumber) - [Err](index.md#err) - [ErrorResult](index.md#errorresult) - [Future](index.md#future) - [JSONParseError](index.md#jsonparseerror) - [JSONParseErrorType](index.md#jsonparseerrortype) - [Logger](index.md#logger) -- [MinimalContact](index.md#minimalcontact) - [MnemonicLanguages](index.md#mnemoniclanguages) - [MnemonicStrength](index.md#mnemonicstrength) - [NULL\_ADDRESS](index.md#null_address) @@ -40,7 +36,6 @@ - [RootError](index.md#rooterror) - [RunningTask](index.md#runningtask) - [RunningTaskWithValue](index.md#runningtaskwithvalue) -- [SHORT\_CURRENCIES](index.md#short_currencies) - [Signature](index.md#signature) - [SignatureBase](index.md#signaturebase) - [Signer](index.md#signer) @@ -51,23 +46,18 @@ - [Token](index.md#token) - [URL\_REGEX](index.md#url_regex) - [ValidatorKind](index.md#validatorkind) -- [anonymizedPhone](index.md#anonymizedphone) - [appendPath](index.md#appendpath) - [bufferToHex](index.md#buffertohex) - [concurrentMap](index.md#concurrentmap) - [concurrentValuesMap](index.md#concurrentvaluesmap) - [conditionWatcher](index.md#conditionwatcher) - [consoleLogger](index.md#consolelogger) -- [currencyToShortMap](index.md#currencytoshortmap) - [ensureLeading0x](index.md#ensureleading0x) - [eqAddress](index.md#eqaddress) - [findAddressIndex](index.md#findaddressindex) - [getAddressChunks](index.md#getaddresschunks) -- [getContactPhoneNumber](index.md#getcontactphonenumber) -- [getErrorMessage](index.md#geterrormessage) - [hexToBuffer](index.md#hextobuffer) - [intersection](index.md#intersection) -- [isContact](index.md#iscontact) - [isE164Number](index.md#ise164number) - [isErr](index.md#iserr) - [isHexString](index.md#ishexstring) @@ -90,7 +80,6 @@ - [pipeToFuture](index.md#pipetofuture) - [prefixLogger](index.md#prefixlogger) - [repeatTask](index.md#repeattask) -- [resolveCurrency](index.md#resolvecurrency) - [retryAsync](index.md#retryasync) - [retryAsyncWithBackOff](index.md#retryasyncwithbackoff) - [retryAsyncWithBackOffAndTimeout](index.md#retryasyncwithbackoffandtimeout) @@ -147,18 +136,6 @@ Re-exports [CELO_DERIVATION_PATH_BASE](account.md#celo_derivation_path_base) ___ -### CURRENCIES - -Re-exports [CURRENCIES](currencies.md#currencies) - -___ - -### CURRENCY\_ENUM - -Re-exports [CURRENCY_ENUM](../enums/currencies.CURRENCY_ENUM.md) - -___ - ### CeloTokenType Re-exports [CeloTokenType](currencies.md#celotokentype) @@ -171,12 +148,6 @@ Re-exports [Comparator](collections.md#comparator) ___ -### ContactPhoneNumber - -Re-exports [ContactPhoneNumber](../interfaces/contacts.ContactPhoneNumber.md) - -___ - ### Err Re-exports [Err](result.md#err) @@ -213,12 +184,6 @@ Re-exports [Logger](logger.md#logger) ___ -### MinimalContact - -Re-exports [MinimalContact](../interfaces/contacts.MinimalContact.md) - -___ - ### MnemonicLanguages Re-exports [MnemonicLanguages](../enums/account.MnemonicLanguages.md) @@ -315,12 +280,6 @@ Re-exports [RunningTaskWithValue](../interfaces/task.RunningTaskWithValue.md) ___ -### SHORT\_CURRENCIES - -Re-exports [SHORT_CURRENCIES](../enums/currencies.SHORT_CURRENCIES.md) - -___ - ### Signature Re-exports [Signature](../interfaces/signatureUtils.Signature.md) @@ -381,12 +340,6 @@ Re-exports [ValidatorKind](../enums/inputValidation.ValidatorKind.md) ___ -### anonymizedPhone - -Re-exports [anonymizedPhone](phoneNumbers.md#anonymizedphone) - -___ - ### appendPath Re-exports [appendPath](string.md#appendpath) @@ -423,12 +376,6 @@ Re-exports [consoleLogger](logger.md#consolelogger) ___ -### currencyToShortMap - -Re-exports [currencyToShortMap](currencies.md#currencytoshortmap) - -___ - ### ensureLeading0x Re-exports [ensureLeading0x](address.md#ensureleading0x) @@ -453,18 +400,6 @@ Re-exports [getAddressChunks](address.md#getaddresschunks) ___ -### getContactPhoneNumber - -Re-exports [getContactPhoneNumber](contacts.md#getcontactphonenumber) - -___ - -### getErrorMessage - -Re-exports [getErrorMessage](displayFormatting.md#geterrormessage) - -___ - ### hexToBuffer Re-exports [hexToBuffer](address.md#hextobuffer) @@ -477,12 +412,6 @@ Re-exports [intersection](collections.md#intersection) ___ -### isContact - -Re-exports [isContact](contacts.md#iscontact) - -___ - ### isE164Number Re-exports [isE164Number](phoneNumbers.md#ise164number) @@ -615,12 +544,6 @@ Re-exports [repeatTask](task.md#repeattask) ___ -### resolveCurrency - -Re-exports [resolveCurrency](currencies.md#resolvecurrency) - -___ - ### retryAsync Re-exports [retryAsync](async.md#retryasync) diff --git a/docs/sdk/base/modules/phoneNumbers.md b/docs/sdk/base/modules/phoneNumbers.md index 8e5432b9f..7688bf560 100644 --- a/docs/sdk/base/modules/phoneNumbers.md +++ b/docs/sdk/base/modules/phoneNumbers.md @@ -14,7 +14,6 @@ ### Functions -- [anonymizedPhone](phoneNumbers.md#anonymizedphone) - [isE164Number](phoneNumbers.md#ise164number) ## Variables @@ -31,29 +30,9 @@ #### Defined in -[packages/sdk/base/src/phoneNumbers.ts:19](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/base/src/phoneNumbers.ts#L19) - -## Functions - -### anonymizedPhone - -▸ **anonymizedPhone**(`phoneNumber`): `string` - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `phoneNumber` | `string` | - -#### Returns - -`string` - -#### Defined in - [packages/sdk/base/src/phoneNumbers.ts:15](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/base/src/phoneNumbers.ts#L15) -___ +## Functions ### isE164Number diff --git a/docs/sdk/contractkit/enums/celo_tokens.StableToken.md b/docs/sdk/contractkit/enums/celo_tokens.StableToken.md index bc8cd96f3..ad248682f 100644 --- a/docs/sdk/contractkit/enums/celo_tokens.StableToken.md +++ b/docs/sdk/contractkit/enums/celo_tokens.StableToken.md @@ -20,7 +20,7 @@ #### Defined in -packages/sdk/base/lib/currencies.d.ts:9 +packages/sdk/base/lib/currencies.d.ts:3 ___ @@ -30,7 +30,7 @@ ___ #### Defined in -packages/sdk/base/lib/currencies.d.ts:10 +packages/sdk/base/lib/currencies.d.ts:4 ___ @@ -40,4 +40,4 @@ ___ #### Defined in -packages/sdk/base/lib/currencies.d.ts:8 +packages/sdk/base/lib/currencies.d.ts:2 diff --git a/docs/sdk/contractkit/enums/celo_tokens.Token.md b/docs/sdk/contractkit/enums/celo_tokens.Token.md index e9825dd94..642c9fc20 100644 --- a/docs/sdk/contractkit/enums/celo_tokens.Token.md +++ b/docs/sdk/contractkit/enums/celo_tokens.Token.md @@ -18,4 +18,4 @@ #### Defined in -packages/sdk/base/lib/currencies.d.ts:13 +packages/sdk/base/lib/currencies.d.ts:7 diff --git a/docs/sdk/contractkit/modules/celo_tokens.md b/docs/sdk/contractkit/modules/celo_tokens.md index 6b03a3f07..ccaa169fa 100644 --- a/docs/sdk/contractkit/modules/celo_tokens.md +++ b/docs/sdk/contractkit/modules/celo_tokens.md @@ -41,7 +41,7 @@ #### Defined in -packages/sdk/base/lib/currencies.d.ts:15 +packages/sdk/base/lib/currencies.d.ts:9 ___ diff --git a/docs/sdk/utils/README.md b/docs/sdk/utils/README.md index 3d32832e2..e4981eec4 100644 --- a/docs/sdk/utils/README.md +++ b/docs/sdk/utils/README.md @@ -10,9 +10,6 @@ - [async](modules/async.md) - [celoHistory](modules/celoHistory.md) - [collections](modules/collections.md) -- [contacts](modules/contacts.md) -- [currencies](modules/currencies.md) -- [displayFormatting](modules/displayFormatting.md) - [ecdh](modules/ecdh.md) - [ecies](modules/ecies.md) - [fixidity](modules/fixidity.md) diff --git a/docs/sdk/utils/enums/currencies.CURRENCY_ENUM.md b/docs/sdk/utils/enums/currencies.CURRENCY_ENUM.md deleted file mode 100644 index 274225def..000000000 --- a/docs/sdk/utils/enums/currencies.CURRENCY_ENUM.md +++ /dev/null @@ -1,47 +0,0 @@ -[@celo/utils](../README.md) / [currencies](../modules/currencies.md) / CURRENCY\_ENUM - -# Enumeration: CURRENCY\_ENUM - -[currencies](../modules/currencies.md).CURRENCY_ENUM - -**`Deprecated`** - -use StableToken and Token - -## Table of contents - -### Enumeration Members - -- [DOLLAR](currencies.CURRENCY_ENUM.md#dollar) -- [EURO](currencies.CURRENCY_ENUM.md#euro) -- [GOLD](currencies.CURRENCY_ENUM.md#gold) - -## Enumeration Members - -### DOLLAR - -• **DOLLAR** = ``"Celo Dollar"`` - -#### Defined in - -packages/sdk/base/lib/currencies.d.ts:4 - -___ - -### EURO - -• **EURO** = ``"Celo Euro"`` - -#### Defined in - -packages/sdk/base/lib/currencies.d.ts:5 - -___ - -### GOLD - -• **GOLD** = ``"Celo Gold"`` - -#### Defined in - -packages/sdk/base/lib/currencies.d.ts:3 diff --git a/docs/sdk/utils/enums/currencies.SHORT_CURRENCIES.md b/docs/sdk/utils/enums/currencies.SHORT_CURRENCIES.md deleted file mode 100644 index 3e850e517..000000000 --- a/docs/sdk/utils/enums/currencies.SHORT_CURRENCIES.md +++ /dev/null @@ -1,47 +0,0 @@ -[@celo/utils](../README.md) / [currencies](../modules/currencies.md) / SHORT\_CURRENCIES - -# Enumeration: SHORT\_CURRENCIES - -[currencies](../modules/currencies.md).SHORT_CURRENCIES - -**`Deprecated`** - -use StableToken and Token - -## Table of contents - -### Enumeration Members - -- [DOLLAR](currencies.SHORT_CURRENCIES.md#dollar) -- [EURO](currencies.SHORT_CURRENCIES.md#euro) -- [GOLD](currencies.SHORT_CURRENCIES.md#gold) - -## Enumeration Members - -### DOLLAR - -• **DOLLAR** = ``"dollar"`` - -#### Defined in - -packages/sdk/base/lib/currencies.d.ts:29 - -___ - -### EURO - -• **EURO** = ``"euro"`` - -#### Defined in - -packages/sdk/base/lib/currencies.d.ts:31 - -___ - -### GOLD - -• **GOLD** = ``"gold"`` - -#### Defined in - -packages/sdk/base/lib/currencies.d.ts:30 diff --git a/docs/sdk/utils/interfaces/contacts.ContactPhoneNumber.md b/docs/sdk/utils/interfaces/contacts.ContactPhoneNumber.md deleted file mode 100644 index c5a4c9a23..000000000 --- a/docs/sdk/utils/interfaces/contacts.ContactPhoneNumber.md +++ /dev/null @@ -1,32 +0,0 @@ -[@celo/utils](../README.md) / [contacts](../modules/contacts.md) / ContactPhoneNumber - -# Interface: ContactPhoneNumber - -[contacts](../modules/contacts.md).ContactPhoneNumber - -## Table of contents - -### Properties - -- [label](contacts.ContactPhoneNumber.md#label) -- [number](contacts.ContactPhoneNumber.md#number) - -## Properties - -### label - -• `Optional` **label**: `string` - -#### Defined in - -packages/sdk/base/lib/contacts.d.ts:2 - -___ - -### number - -• `Optional` **number**: `string` - -#### Defined in - -packages/sdk/base/lib/contacts.d.ts:3 diff --git a/docs/sdk/utils/interfaces/contacts.MinimalContact.md b/docs/sdk/utils/interfaces/contacts.MinimalContact.md deleted file mode 100644 index 489b88532..000000000 --- a/docs/sdk/utils/interfaces/contacts.MinimalContact.md +++ /dev/null @@ -1,54 +0,0 @@ -[@celo/utils](../README.md) / [contacts](../modules/contacts.md) / MinimalContact - -# Interface: MinimalContact - -[contacts](../modules/contacts.md).MinimalContact - -## Table of contents - -### Properties - -- [displayName](contacts.MinimalContact.md#displayname) -- [phoneNumbers](contacts.MinimalContact.md#phonenumbers) -- [recordID](contacts.MinimalContact.md#recordid) -- [thumbnailPath](contacts.MinimalContact.md#thumbnailpath) - -## Properties - -### displayName - -• `Optional` **displayName**: `string` - -#### Defined in - -packages/sdk/base/lib/contacts.d.ts:7 - -___ - -### phoneNumbers - -• `Optional` **phoneNumbers**: [`ContactPhoneNumber`](contacts.ContactPhoneNumber.md)[] - -#### Defined in - -packages/sdk/base/lib/contacts.d.ts:8 - -___ - -### recordID - -• **recordID**: `string` - -#### Defined in - -packages/sdk/base/lib/contacts.d.ts:6 - -___ - -### thumbnailPath - -• `Optional` **thumbnailPath**: `string` - -#### Defined in - -packages/sdk/base/lib/contacts.d.ts:9 diff --git a/docs/sdk/utils/modules/contacts.md b/docs/sdk/utils/modules/contacts.md deleted file mode 100644 index 0bd226a1e..000000000 --- a/docs/sdk/utils/modules/contacts.md +++ /dev/null @@ -1,80 +0,0 @@ -[@celo/utils](../README.md) / contacts - -# Module: contacts - -## Table of contents - -### Interfaces - -- [ContactPhoneNumber](../interfaces/contacts.ContactPhoneNumber.md) -- [MinimalContact](../interfaces/contacts.MinimalContact.md) - -### Functions - -- [getContactNameHash](contacts.md#getcontactnamehash) -- [getContactPhoneNumber](contacts.md#getcontactphonenumber) -- [isContact](contacts.md#iscontact) - -## Functions - -### getContactNameHash - -▸ **getContactNameHash**(`contact`): `string` - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `contact` | [`MinimalContact`](../interfaces/contacts.MinimalContact.md) | - -#### Returns - -`string` - -**`Deprecated`** - -May be removed in future - -#### Defined in - -[packages/sdk/utils/src/contacts.ts:16](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/utils/src/contacts.ts#L16) - -___ - -### getContactPhoneNumber - -▸ **getContactPhoneNumber**(`contact`): `undefined` \| ``null`` \| `string` - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `contact` | [`MinimalContact`](../interfaces/contacts.MinimalContact.md) | - -#### Returns - -`undefined` \| ``null`` \| `string` - -#### Defined in - -packages/sdk/base/lib/contacts.d.ts:11 - -___ - -### isContact - -▸ **isContact**(`contactOrNumber`): contactOrNumber is MinimalContact - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `contactOrNumber` | `any` | - -#### Returns - -contactOrNumber is MinimalContact - -#### Defined in - -packages/sdk/base/lib/contacts.d.ts:12 diff --git a/docs/sdk/utils/modules/currencies.md b/docs/sdk/utils/modules/currencies.md deleted file mode 100644 index 630430779..000000000 --- a/docs/sdk/utils/modules/currencies.md +++ /dev/null @@ -1,73 +0,0 @@ -[@celo/utils](../README.md) / currencies - -# Module: currencies - -## Table of contents - -### Enumerations - -- [CURRENCY\_ENUM](../enums/currencies.CURRENCY_ENUM.md) -- [SHORT\_CURRENCIES](../enums/currencies.SHORT_CURRENCIES.md) - -### Variables - -- [CURRENCIES](currencies.md#currencies) -- [currencyToShortMap](currencies.md#currencytoshortmap) - -### Functions - -- [resolveCurrency](currencies.md#resolvecurrency) - -## Variables - -### CURRENCIES - -• `Const` **CURRENCIES**: `CurrencyObject` - -**`Deprecated`** - -#### Defined in - -packages/sdk/base/lib/currencies.d.ts:25 - -___ - -### currencyToShortMap - -• `Const` **currencyToShortMap**: `Object` - -**`Deprecated`** - -use StableToken and Token - -#### Type declaration - -| Name | Type | -| :------ | :------ | -| `Celo Dollar` | [`SHORT_CURRENCIES`](../enums/currencies.SHORT_CURRENCIES.md) | -| `Celo Euro` | [`SHORT_CURRENCIES`](../enums/currencies.SHORT_CURRENCIES.md) | -| `Celo Gold` | [`SHORT_CURRENCIES`](../enums/currencies.SHORT_CURRENCIES.md) | - -#### Defined in - -packages/sdk/base/lib/currencies.d.ts:34 - -## Functions - -### resolveCurrency - -▸ **resolveCurrency**(`label`): [`CURRENCY_ENUM`](../enums/currencies.CURRENCY_ENUM.md) - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `label` | `string` | - -#### Returns - -[`CURRENCY_ENUM`](../enums/currencies.CURRENCY_ENUM.md) - -#### Defined in - -packages/sdk/base/lib/currencies.d.ts:26 diff --git a/docs/sdk/utils/modules/displayFormatting.md b/docs/sdk/utils/modules/displayFormatting.md deleted file mode 100644 index e63213b69..000000000 --- a/docs/sdk/utils/modules/displayFormatting.md +++ /dev/null @@ -1,29 +0,0 @@ -[@celo/utils](../README.md) / displayFormatting - -# Module: displayFormatting - -## Table of contents - -### Functions - -- [getErrorMessage](displayFormatting.md#geterrormessage) - -## Functions - -### getErrorMessage - -▸ **getErrorMessage**(`error`): `string` - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `error` | `Error` | - -#### Returns - -`string` - -#### Defined in - -packages/sdk/base/lib/displayFormatting.d.ts:2 diff --git a/docs/sdk/utils/modules/index.md b/docs/sdk/utils/modules/index.md index 2d644b7ec..70101e96f 100644 --- a/docs/sdk/utils/modules/index.md +++ b/docs/sdk/utils/modules/index.md @@ -7,20 +7,10 @@ ### References - [AddressUtils](index.md#addressutils) -- [CURRENCIES](index.md#currencies) -- [CURRENCY\_ENUM](index.md#currency_enum) -- [ContactPhoneNumber](index.md#contactphonenumber) - [ECIES](index.md#ecies) - [IstanbulUtils](index.md#istanbulutils) -- [MinimalContact](index.md#minimalcontact) -- [SHORT\_CURRENCIES](index.md#short_currencies) - [SignatureUtils](index.md#signatureutils) - [StringUtils](index.md#stringutils) -- [currencyToShortMap](index.md#currencytoshortmap) -- [getContactNameHash](index.md#getcontactnamehash) -- [getContactPhoneNumber](index.md#getcontactphonenumber) -- [isContact](index.md#iscontact) -- [resolveCurrency](index.md#resolvecurrency) ## References @@ -30,24 +20,6 @@ Renames and re-exports [address](address.md) ___ -### CURRENCIES - -Re-exports [CURRENCIES](currencies.md#currencies) - -___ - -### CURRENCY\_ENUM - -Re-exports [CURRENCY_ENUM](../enums/currencies.CURRENCY_ENUM.md) - -___ - -### ContactPhoneNumber - -Re-exports [ContactPhoneNumber](../interfaces/contacts.ContactPhoneNumber.md) - -___ - ### ECIES Re-exports [ECIES](ecies.md#ecies) @@ -60,18 +32,6 @@ Re-exports [IstanbulUtils](istanbul.md#istanbulutils) ___ -### MinimalContact - -Re-exports [MinimalContact](../interfaces/contacts.MinimalContact.md) - -___ - -### SHORT\_CURRENCIES - -Re-exports [SHORT_CURRENCIES](../enums/currencies.SHORT_CURRENCIES.md) - -___ - ### SignatureUtils Re-exports [SignatureUtils](signatureUtils.md#signatureutils) @@ -81,33 +41,3 @@ ___ ### StringUtils Re-exports [StringUtils](string.md#stringutils) - -___ - -### currencyToShortMap - -Re-exports [currencyToShortMap](currencies.md#currencytoshortmap) - -___ - -### getContactNameHash - -Re-exports [getContactNameHash](contacts.md#getcontactnamehash) - -___ - -### getContactPhoneNumber - -Re-exports [getContactPhoneNumber](contacts.md#getcontactphonenumber) - -___ - -### isContact - -Re-exports [isContact](contacts.md#iscontact) - -___ - -### resolveCurrency - -Re-exports [resolveCurrency](currencies.md#resolvecurrency) diff --git a/packages/sdk/base/src/contacts.ts b/packages/sdk/base/src/contacts.ts deleted file mode 100644 index f65572021..000000000 --- a/packages/sdk/base/src/contacts.ts +++ /dev/null @@ -1,31 +0,0 @@ -export interface ContactPhoneNumber { - label?: string - number?: string -} - -export interface MinimalContact { - recordID: string - displayName?: string - phoneNumbers?: ContactPhoneNumber[] - thumbnailPath?: string -} - -export const getContactPhoneNumber = (contact: MinimalContact) => { - if (!contact) { - throw new Error('Invalid contact') - } - - if (!contact.phoneNumbers || !contact.phoneNumbers.length) { - return null - } - - // TODO(Rossy) find the right phone number based on the address - return contact.phoneNumbers[0].number -} - -export function isContact(contactOrNumber: any): contactOrNumber is MinimalContact { - if (typeof contactOrNumber === 'object') { - return 'recordID' in contactOrNumber - } - return false -} diff --git a/packages/sdk/base/src/currencies.ts b/packages/sdk/base/src/currencies.ts index 2bfbd8788..19105b835 100644 --- a/packages/sdk/base/src/currencies.ts +++ b/packages/sdk/base/src/currencies.ts @@ -1,10 +1,3 @@ -/** @deprecated use StableToken and Token */ -export enum CURRENCY_ENUM { - GOLD = 'Celo Gold', - DOLLAR = 'Celo Dollar', - EURO = 'Celo Euro', -} - export enum StableToken { cUSD = 'cUSD', cEUR = 'cEUR', @@ -16,57 +9,3 @@ export enum Token { } export type CeloTokenType = StableToken | Token - -interface Currency { - symbol: string - code: string - displayDecimals: number -} - -type CurrencyObject = { [key in CURRENCY_ENUM]: Currency } - -/** @deprecated */ -export const CURRENCIES: CurrencyObject = { - [CURRENCY_ENUM.GOLD]: { - symbol: '', - code: 'cGLD', - displayDecimals: 3, - }, - [CURRENCY_ENUM.DOLLAR]: { - symbol: '$', - code: 'cUSD', - displayDecimals: 2, - }, - [CURRENCY_ENUM.EURO]: { - symbol: '€', - code: 'cEUR', - displayDecimals: 2, - }, -} - -export const resolveCurrency = (label: string): CURRENCY_ENUM => { - if (label && label.toLowerCase().includes('dollar')) { - return CURRENCY_ENUM.DOLLAR - } else if (label && label.toLowerCase().includes('euro')) { - return CURRENCY_ENUM.EURO - } else if (label && label.toLowerCase().includes('gold')) { - return CURRENCY_ENUM.GOLD - } else { - console.info('Unable to resolve currency from label: ' + label) - return CURRENCY_ENUM.DOLLAR - } -} - -/** @deprecated use StableToken and Token */ -export enum SHORT_CURRENCIES { - DOLLAR = 'dollar', - GOLD = 'gold', - EURO = 'euro', -} - -/** @deprecated use StableToken and Token */ -export const currencyToShortMap = { - [CURRENCY_ENUM.DOLLAR]: SHORT_CURRENCIES.DOLLAR, - [CURRENCY_ENUM.GOLD]: SHORT_CURRENCIES.GOLD, - [CURRENCY_ENUM.EURO]: SHORT_CURRENCIES.EURO, -} diff --git a/packages/sdk/base/src/displayFormatting.ts b/packages/sdk/base/src/displayFormatting.ts deleted file mode 100644 index 6d9a85662..000000000 --- a/packages/sdk/base/src/displayFormatting.ts +++ /dev/null @@ -1,11 +0,0 @@ -/** @internal */ -export function getErrorMessage(error: Error) { - // This replacement is because when the error reaches here, it's been wrapped - // by Error: multiple times - let errorMsg = error.message || error.name || 'unknown' - errorMsg = errorMsg.replace(/Error:/g, '') - if (error.stack) { - errorMsg += ' in ' + error.stack.substring(0, 100) - } - return errorMsg -} diff --git a/packages/sdk/base/src/index.ts b/packages/sdk/base/src/index.ts index 716c6645e..084f00fdf 100644 --- a/packages/sdk/base/src/index.ts +++ b/packages/sdk/base/src/index.ts @@ -2,9 +2,7 @@ export * from './account' export * from './address' export * from './async' export * from './collections' -export * from './contacts' export * from './currencies' -export * from './displayFormatting' export * from './future' export * from './inputValidation' export * from './io' diff --git a/packages/sdk/base/src/phoneNumbers.ts b/packages/sdk/base/src/phoneNumbers.ts index 1334c0f9e..84bc29f4f 100644 --- a/packages/sdk/base/src/phoneNumbers.ts +++ b/packages/sdk/base/src/phoneNumbers.ts @@ -12,10 +12,6 @@ export function isE164Number(phoneNumber: string) { return E164_REGEX.test(phoneNumber) } -export function anonymizedPhone(phoneNumber: string) { - return phoneNumber.slice(0, -4) + 'XXXX' -} - export const PhoneNumberBase = { isE164Number, } diff --git a/packages/sdk/metadata-claims/lib/account.d.ts b/packages/sdk/metadata-claims/lib/account.d.ts new file mode 100644 index 000000000..e12432041 --- /dev/null +++ b/packages/sdk/metadata-claims/lib/account.d.ts @@ -0,0 +1,20 @@ +import * as t from 'io-ts'; +import { ClaimTypes } from './types'; +/** + * + * Provide the type minus the validation that the public key and address are derived from the same private key + */ +export declare const AccountClaimTypeH: t.TypeC<{ + type: t.LiteralC; + timestamp: t.NumberC; + address: t.Type; + publicKey: t.UnionC<[t.UndefinedC, t.Type]>; +}>; +export declare const AccountClaimType: t.Type<{ + type: ClaimTypes.ACCOUNT; + timestamp: number; + address: string; + publicKey: string | undefined; +}, any, unknown>; +export type AccountClaim = t.TypeOf; +export declare const createAccountClaim: (address: string, publicKey?: string) => AccountClaim; diff --git a/packages/sdk/metadata-claims/lib/account.js b/packages/sdk/metadata-claims/lib/account.js new file mode 100644 index 000000000..5363a4440 --- /dev/null +++ b/packages/sdk/metadata-claims/lib/account.js @@ -0,0 +1,66 @@ +"use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}); +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.createAccountClaim = exports.AccountClaimType = exports.AccountClaimTypeH = void 0; +const address_1 = require("@celo/utils/lib/address"); +const io_1 = require("@celo/utils/lib/io"); +const Either_1 = require("fp-ts/lib/Either"); +const t = __importStar(require("io-ts")); +const types_1 = require("./types"); +/** + * + * Provide the type minus the validation that the public key and address are derived from the same private key + */ +exports.AccountClaimTypeH = t.type({ + type: t.literal(types_1.ClaimTypes.ACCOUNT), + timestamp: types_1.TimestampType, + address: io_1.AddressType, + // io-ts way of defining optional key-value pair + publicKey: t.union([t.undefined, io_1.PublicKeyType]), +}); +exports.AccountClaimType = new t.Type('AccountClaimType', exports.AccountClaimTypeH.is, (unknownValue, context) => Either_1.either.chain(exports.AccountClaimTypeH.validate(unknownValue, context), (claim) => { + if (claim.publicKey === undefined) { + return t.success(claim); + } + const derivedAddress = (0, address_1.publicKeyToAddress)(claim.publicKey); + return derivedAddress === claim.address + ? t.success(claim) + : t.failure(claim, context, 'public key did not match the address in the claim'); +}), (x) => x); +const createAccountClaim = (address, publicKey) => { + const claim = { + timestamp: (0, types_1.now)(), + type: types_1.ClaimTypes.ACCOUNT, + address, + publicKey, + }; + const parsedClaim = exports.AccountClaimType.decode(claim); + if ((0, Either_1.isLeft)(parsedClaim)) { + throw new Error(`A valid claim could not be created`); + } + return parsedClaim.right; +}; +exports.createAccountClaim = createAccountClaim; +//# sourceMappingURL=account.js.map \ No newline at end of file diff --git a/packages/sdk/metadata-claims/lib/account.js.map b/packages/sdk/metadata-claims/lib/account.js.map new file mode 100644 index 000000000..a132a0119 --- /dev/null +++ b/packages/sdk/metadata-claims/lib/account.js.map @@ -0,0 +1 @@ +{"version":3,"file":"account.js","sourceRoot":"","sources":["../src/account.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,qDAA4D;AAC5D,2CAA+D;AAC/D,6CAAiD;AACjD,yCAA0B;AAC1B,mCAAwD;AAExD;;;GAGG;AACU,QAAA,iBAAiB,GAAG,CAAC,CAAC,IAAI,CAAC;IACtC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,kBAAU,CAAC,OAAO,CAAC;IACnC,SAAS,EAAE,qBAAa;IACxB,OAAO,EAAE,gBAAW;IACpB,gDAAgD;IAChD,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,kBAAa,CAAC,CAAC;CACjD,CAAC,CAAA;AAEW,QAAA,gBAAgB,GAAG,IAAI,CAAC,CAAC,IAAI,CACxC,kBAAkB,EAClB,yBAAiB,CAAC,EAAE,EACpB,CAAC,YAAY,EAAE,OAAO,EAAE,EAAE,CACxB,eAAM,CAAC,KAAK,CAAC,yBAAiB,CAAC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE;IACxE,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QAClC,OAAO,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;IACzB,CAAC;IACD,MAAM,cAAc,GAAG,IAAA,4BAAkB,EAAC,KAAK,CAAC,SAAS,CAAC,CAAA;IAC1D,OAAO,cAAc,KAAK,KAAK,CAAC,OAAO;QACrC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;QAClB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,mDAAmD,CAAC,CAAA;AACpF,CAAC,CAAC,EACJ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CACT,CAAA;AAIM,MAAM,kBAAkB,GAAG,CAAC,OAAe,EAAE,SAAkB,EAAgB,EAAE;IACtF,MAAM,KAAK,GAAG;QACZ,SAAS,EAAE,IAAA,WAAG,GAAE;QAChB,IAAI,EAAE,kBAAU,CAAC,OAAO;QACxB,OAAO;QACP,SAAS;KACV,CAAA;IAED,MAAM,WAAW,GAAG,wBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IAElD,IAAI,IAAA,eAAM,EAAC,WAAW,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAA;IACvD,CAAC;IAED,OAAO,WAAW,CAAC,KAAK,CAAA;AAC1B,CAAC,CAAA;AAfY,QAAA,kBAAkB,sBAe9B"} \ No newline at end of file diff --git a/packages/sdk/metadata-claims/lib/claim.d.ts b/packages/sdk/metadata-claims/lib/claim.d.ts new file mode 100644 index 000000000..2f53fd188 --- /dev/null +++ b/packages/sdk/metadata-claims/lib/claim.d.ts @@ -0,0 +1,89 @@ +import * as t from 'io-ts'; +import { AccountClaim } from './account'; +import { ClaimTypes } from './types'; +export declare const KeybaseClaimType: t.TypeC<{ + type: t.LiteralC; + timestamp: t.NumberC; + username: t.StringC; +}>; +export type KeybaseClaim = t.TypeOf; +declare const DomainClaimType: t.TypeC<{ + type: t.LiteralC; + timestamp: t.NumberC; + domain: t.StringC; +}>; +declare const NameClaimType: t.TypeC<{ + type: t.LiteralC; + timestamp: t.NumberC; + name: t.StringC; +}>; +declare const StorageClaimType: t.TypeC<{ + type: t.LiteralC; + timestamp: t.NumberC; + address: t.StringC; + filteredDataPaths: t.StringC; +}>; +export declare const ClaimType: t.UnionC<[t.Type<{ + type: ClaimTypes.ACCOUNT; + timestamp: number; + address: string; + publicKey: string | undefined; +}, any, unknown>, t.TypeC<{ + type: t.LiteralC; + timestamp: t.NumberC; + domain: t.StringC; +}>, t.TypeC<{ + type: t.LiteralC; + timestamp: t.NumberC; + username: t.StringC; +}>, t.TypeC<{ + type: t.LiteralC; + timestamp: t.NumberC; + name: t.StringC; +}>, t.TypeC<{ + type: t.LiteralC; + timestamp: t.NumberC; + address: t.StringC; + filteredDataPaths: t.StringC; +}>]>; +export declare const SignedClaimType: t.TypeC<{ + claim: t.UnionC<[t.Type<{ + type: ClaimTypes.ACCOUNT; + timestamp: number; + address: string; + publicKey: string | undefined; + }, any, unknown>, t.TypeC<{ + type: t.LiteralC; + timestamp: t.NumberC; + domain: t.StringC; + }>, t.TypeC<{ + type: t.LiteralC; + timestamp: t.NumberC; + username: t.StringC; + }>, t.TypeC<{ + type: t.LiteralC; + timestamp: t.NumberC; + name: t.StringC; + }>, t.TypeC<{ + type: t.LiteralC; + timestamp: t.NumberC; + address: t.StringC; + filteredDataPaths: t.StringC; + }>]>; + signature: t.StringC; +}>; +export declare const DOMAIN_TXT_HEADER = "celo-site-verification"; +export type DomainClaim = t.TypeOf; +export type NameClaim = t.TypeOf; +export type StorageClaim = t.TypeOf; +export type Claim = DomainClaim | KeybaseClaim | NameClaim | AccountClaim | StorageClaim; +export type ClaimPayload = K extends typeof ClaimTypes.DOMAIN ? DomainClaim : K extends typeof ClaimTypes.NAME ? NameClaim : K extends typeof ClaimTypes.KEYBASE ? KeybaseClaim : K extends typeof ClaimTypes.ACCOUNT ? AccountClaim : StorageClaim; +/** @internal */ +export declare const isOfType: (type: K) => (data: Claim) => data is ClaimPayload; +export declare function hashOfClaim(claim: Claim): string; +export declare function hashOfClaims(claims: Claim[]): string; +export declare function serializeClaim(claim: Claim): string; +export declare const createNameClaim: (name: string) => NameClaim; +export declare const createDomainClaim: (domain: string) => DomainClaim; +export declare const createStorageClaim: (storageURL: string) => StorageClaim; +export {}; diff --git a/packages/sdk/metadata-claims/lib/claim.js b/packages/sdk/metadata-claims/lib/claim.js new file mode 100644 index 000000000..09e271edd --- /dev/null +++ b/packages/sdk/metadata-claims/lib/claim.js @@ -0,0 +1,100 @@ +"use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}); +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.createStorageClaim = exports.createDomainClaim = exports.createNameClaim = exports.serializeClaim = exports.hashOfClaims = exports.hashOfClaim = exports.isOfType = exports.DOMAIN_TXT_HEADER = exports.SignedClaimType = exports.ClaimType = exports.KeybaseClaimType = void 0; +const signatureUtils_1 = require("@celo/utils/lib/signatureUtils"); +const t = __importStar(require("io-ts")); +const account_1 = require("./account"); +const types_1 = require("./types"); +exports.KeybaseClaimType = t.type({ + type: t.literal(types_1.ClaimTypes.KEYBASE), + timestamp: types_1.TimestampType, + // TODO: Validate compliant username before just interpolating + username: t.string, +}); +const DomainClaimType = t.type({ + type: t.literal(types_1.ClaimTypes.DOMAIN), + timestamp: types_1.TimestampType, + domain: t.string, +}); +const NameClaimType = t.type({ + type: t.literal(types_1.ClaimTypes.NAME), + timestamp: types_1.TimestampType, + name: t.string, +}); +const StorageClaimType = t.type({ + type: t.literal(types_1.ClaimTypes.STORAGE), + timestamp: types_1.TimestampType, + address: t.string, + filteredDataPaths: t.string, +}); +exports.ClaimType = t.union([ + account_1.AccountClaimType, + DomainClaimType, + exports.KeybaseClaimType, + NameClaimType, + StorageClaimType, +]); +exports.SignedClaimType = t.type({ + claim: exports.ClaimType, + signature: types_1.SignatureType, +}); +exports.DOMAIN_TXT_HEADER = 'celo-site-verification'; +/** @internal */ +const isOfType = (type) => (data) => data.type === type; +exports.isOfType = isOfType; +function hashOfClaim(claim) { + return (0, signatureUtils_1.hashMessage)(serializeClaim(claim)); +} +exports.hashOfClaim = hashOfClaim; +function hashOfClaims(claims) { + const hashes = claims.map(hashOfClaim); + return (0, signatureUtils_1.hashMessage)(hashes.join('')); +} +exports.hashOfClaims = hashOfClaims; +function serializeClaim(claim) { + return JSON.stringify(claim); +} +exports.serializeClaim = serializeClaim; +const createNameClaim = (name) => ({ + name, + timestamp: (0, types_1.now)(), + type: types_1.ClaimTypes.NAME, +}); +exports.createNameClaim = createNameClaim; +const createDomainClaim = (domain) => ({ + domain, + timestamp: (0, types_1.now)(), + type: types_1.ClaimTypes.DOMAIN, +}); +exports.createDomainClaim = createDomainClaim; +const createStorageClaim = (storageURL) => ({ + address: storageURL, + timestamp: (0, types_1.now)(), + type: types_1.ClaimTypes.STORAGE, + filteredDataPaths: '.*', +}); +exports.createStorageClaim = createStorageClaim; +//# sourceMappingURL=claim.js.map \ No newline at end of file diff --git a/packages/sdk/metadata-claims/lib/claim.js.map b/packages/sdk/metadata-claims/lib/claim.js.map new file mode 100644 index 000000000..22f700491 --- /dev/null +++ b/packages/sdk/metadata-claims/lib/claim.js.map @@ -0,0 +1 @@ +{"version":3,"file":"claim.js","sourceRoot":"","sources":["../src/claim.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,mEAA4D;AAC5D,yCAA0B;AAC1B,uCAA0D;AAC1D,mCAAuE;AAE1D,QAAA,gBAAgB,GAAG,CAAC,CAAC,IAAI,CAAC;IACrC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,kBAAU,CAAC,OAAO,CAAC;IACnC,SAAS,EAAE,qBAAa;IACxB,8DAA8D;IAC9D,QAAQ,EAAE,CAAC,CAAC,MAAM;CACnB,CAAC,CAAA;AAGF,MAAM,eAAe,GAAG,CAAC,CAAC,IAAI,CAAC;IAC7B,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,kBAAU,CAAC,MAAM,CAAC;IAClC,SAAS,EAAE,qBAAa;IACxB,MAAM,EAAE,CAAC,CAAC,MAAM;CACjB,CAAC,CAAA;AAEF,MAAM,aAAa,GAAG,CAAC,CAAC,IAAI,CAAC;IAC3B,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,kBAAU,CAAC,IAAI,CAAC;IAChC,SAAS,EAAE,qBAAa;IACxB,IAAI,EAAE,CAAC,CAAC,MAAM;CACf,CAAC,CAAA;AAEF,MAAM,gBAAgB,GAAG,CAAC,CAAC,IAAI,CAAC;IAC9B,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,kBAAU,CAAC,OAAO,CAAC;IACnC,SAAS,EAAE,qBAAa;IACxB,OAAO,EAAE,CAAC,CAAC,MAAM;IACjB,iBAAiB,EAAE,CAAC,CAAC,MAAM;CAC5B,CAAC,CAAA;AAEW,QAAA,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC;IAC/B,0BAAgB;IAChB,eAAe;IACf,wBAAgB;IAChB,aAAa;IACb,gBAAgB;CACjB,CAAC,CAAA;AAEW,QAAA,eAAe,GAAG,CAAC,CAAC,IAAI,CAAC;IACpC,KAAK,EAAE,iBAAS;IAChB,SAAS,EAAE,qBAAa;CACzB,CAAC,CAAA;AAEW,QAAA,iBAAiB,GAAG,wBAAwB,CAAA;AAgBzD,gBAAgB;AACT,MAAM,QAAQ,GACnB,CAAuB,IAAO,EAAE,EAAE,CAClC,CAAC,IAAW,EAA2B,EAAE,CACvC,IAAI,CAAC,IAAI,KAAK,IAAI,CAAA;AAHT,QAAA,QAAQ,YAGC;AAEtB,SAAgB,WAAW,CAAC,KAAY;IACtC,OAAO,IAAA,4BAAW,EAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAA;AAC3C,CAAC;AAFD,kCAEC;AAED,SAAgB,YAAY,CAAC,MAAe;IAC1C,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;IACtC,OAAO,IAAA,4BAAW,EAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAA;AACrC,CAAC;AAHD,oCAGC;AAED,SAAgB,cAAc,CAAC,KAAY;IACzC,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;AAC9B,CAAC;AAFD,wCAEC;AAEM,MAAM,eAAe,GAAG,CAAC,IAAY,EAAa,EAAE,CAAC,CAAC;IAC3D,IAAI;IACJ,SAAS,EAAE,IAAA,WAAG,GAAE;IAChB,IAAI,EAAE,kBAAU,CAAC,IAAI;CACtB,CAAC,CAAA;AAJW,QAAA,eAAe,mBAI1B;AAEK,MAAM,iBAAiB,GAAG,CAAC,MAAc,EAAe,EAAE,CAAC,CAAC;IACjE,MAAM;IACN,SAAS,EAAE,IAAA,WAAG,GAAE;IAChB,IAAI,EAAE,kBAAU,CAAC,MAAM;CACxB,CAAC,CAAA;AAJW,QAAA,iBAAiB,qBAI5B;AAEK,MAAM,kBAAkB,GAAG,CAAC,UAAkB,EAAgB,EAAE,CAAC,CAAC;IACvE,OAAO,EAAE,UAAU;IACnB,SAAS,EAAE,IAAA,WAAG,GAAE;IAChB,IAAI,EAAE,kBAAU,CAAC,OAAO;IACxB,iBAAiB,EAAE,IAAI;CACxB,CAAC,CAAA;AALW,QAAA,kBAAkB,sBAK7B"} \ No newline at end of file diff --git a/packages/sdk/metadata-claims/lib/index.d.ts b/packages/sdk/metadata-claims/lib/index.d.ts new file mode 100644 index 000000000..31b421c8b --- /dev/null +++ b/packages/sdk/metadata-claims/lib/index.d.ts @@ -0,0 +1,2 @@ +export { Claim, createNameClaim } from './claim'; +export * from './metadata'; diff --git a/packages/sdk/metadata-claims/lib/index.js b/packages/sdk/metadata-claims/lib/index.js new file mode 100644 index 000000000..3075c7632 --- /dev/null +++ b/packages/sdk/metadata-claims/lib/index.js @@ -0,0 +1,21 @@ +"use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __exportStar = (this && this.__exportStar) || function(m, exports) { + for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.createNameClaim = void 0; +var claim_1 = require("./claim"); +Object.defineProperty(exports, "createNameClaim", { enumerable: true, get: function () { return claim_1.createNameClaim; } }); +__exportStar(require("./metadata"), exports); +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/packages/sdk/metadata-claims/lib/index.js.map b/packages/sdk/metadata-claims/lib/index.js.map new file mode 100644 index 000000000..b795a3c59 --- /dev/null +++ b/packages/sdk/metadata-claims/lib/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,iCAAgD;AAAhC,wGAAA,eAAe,OAAA;AAC/B,6CAA0B"} \ No newline at end of file diff --git a/packages/sdk/metadata-claims/lib/keybase.d.ts b/packages/sdk/metadata-claims/lib/keybase.d.ts new file mode 100644 index 000000000..5ecb73a92 --- /dev/null +++ b/packages/sdk/metadata-claims/lib/keybase.d.ts @@ -0,0 +1,19 @@ +import { Address } from '@celo/base/lib/address'; +import { KeybaseClaim } from './claim'; +import { AccountMetadataSignerGetters } from './types'; +export declare const keybaseFilePathToProof = ".well-known/celo/"; +export declare const proofFileName: (address: Address) => string; +export declare const targetURL: (username: string, address: Address) => string; +/** + * + * @remarks + * If verification encounters an error, returns the error message as a string + * otherwise returns undefined when successful + * + * @param accountsInfoGetters + * @param claim + * @param signer + * @returns a human readable string with claims (non)verifiability or undefined + */ +export declare function verifyKeybaseClaim(accountsInfoGetters: AccountMetadataSignerGetters, claim: KeybaseClaim, signer: Address): Promise; +export declare const createKeybaseClaim: (username: string) => KeybaseClaim; diff --git a/packages/sdk/metadata-claims/lib/keybase.js b/packages/sdk/metadata-claims/lib/keybase.js new file mode 100644 index 000000000..b327ca9c8 --- /dev/null +++ b/packages/sdk/metadata-claims/lib/keybase.js @@ -0,0 +1,74 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.createKeybaseClaim = exports.verifyKeybaseClaim = exports.targetURL = exports.proofFileName = exports.keybaseFilePathToProof = void 0; +const cross_fetch_1 = __importDefault(require("cross-fetch")); +const Either_1 = require("fp-ts/lib/Either"); +const claim_1 = require("./claim"); +const metadata_1 = require("./metadata"); +const types_1 = require("./types"); +exports.keybaseFilePathToProof = `.well-known/celo/`; +const proofFileName = (address) => `verify-${address}.json`; +exports.proofFileName = proofFileName; +const targetURL = (username, address) => `https://${username}.keybase.pub/${exports.keybaseFilePathToProof}${(0, exports.proofFileName)(address)}`; +exports.targetURL = targetURL; +/** + * + * @remarks + * If verification encounters an error, returns the error message as a string + * otherwise returns undefined when successful + * + * @param accountsInfoGetters + * @param claim + * @param signer + * @returns a human readable string with claims (non)verifiability or undefined + */ +function verifyKeybaseClaim(accountsInfoGetters, claim, signer) { + return __awaiter(this, void 0, void 0, function* () { + try { + const resp = yield (0, cross_fetch_1.default)((0, exports.targetURL)(claim.username, signer)); + if (!resp.ok) { + return `Proof of ownership could not be retrieved at ${(0, exports.targetURL)(claim.username, signer)}, request yielded ${resp.status} status code`; + } + const jsonResp = yield resp.json(); + const parsedClaim = claim_1.SignedClaimType.decode(jsonResp); + if ((0, Either_1.isLeft)(parsedClaim)) { + return 'Claim is incorrectly formatted'; + } + const hasValidSignature = yield metadata_1.IdentityMetadataWrapper.verifySignerForAddress(accountsInfoGetters, (0, claim_1.hashOfClaim)(parsedClaim.right.claim), parsedClaim.right.signature, signer); + if (!hasValidSignature) { + return 'Claim does not contain a valid signature'; + } + const parsedKeybaseClaim = claim_1.KeybaseClaimType.decode(parsedClaim.right.claim); + if ((0, Either_1.isLeft)(parsedKeybaseClaim)) { + return 'Hosted claim is not a Keybase claim'; + } + if (parsedKeybaseClaim.right.username !== claim.username) { + return 'Usernames do not match'; + } + return; + } + catch (error) { + return 'Could not verify Keybase claim: ' + error; + } + }); +} +exports.verifyKeybaseClaim = verifyKeybaseClaim; +const createKeybaseClaim = (username) => ({ + username, + timestamp: (0, types_1.now)(), + type: types_1.ClaimTypes.KEYBASE, +}); +exports.createKeybaseClaim = createKeybaseClaim; +//# sourceMappingURL=keybase.js.map \ No newline at end of file diff --git a/packages/sdk/metadata-claims/lib/keybase.js.map b/packages/sdk/metadata-claims/lib/keybase.js.map new file mode 100644 index 000000000..c916f044f --- /dev/null +++ b/packages/sdk/metadata-claims/lib/keybase.js.map @@ -0,0 +1 @@ +{"version":3,"file":"keybase.js","sourceRoot":"","sources":["../src/keybase.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AACA,8DAA+B;AAC/B,6CAAyC;AACzC,mCAAsF;AACtF,yCAAoD;AACpD,mCAAuE;AAE1D,QAAA,sBAAsB,GAAG,mBAAmB,CAAA;AAClD,MAAM,aAAa,GAAG,CAAC,OAAgB,EAAE,EAAE,CAAC,UAAU,OAAO,OAAO,CAAA;AAA9D,QAAA,aAAa,iBAAiD;AACpE,MAAM,SAAS,GAAG,CAAC,QAAgB,EAAE,OAAgB,EAAE,EAAE,CAC9D,WAAW,QAAQ,gBAAgB,8BAAsB,GAAG,IAAA,qBAAa,EAAC,OAAO,CAAC,EAAE,CAAA;AADzE,QAAA,SAAS,aACgE;AAEtF;;;;;;;;;;GAUG;AAEH,SAAsB,kBAAkB,CACtC,mBAAiD,EACjD,KAAmB,EACnB,MAAe;;QAEf,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,IAAA,qBAAK,EAAC,IAAA,iBAAS,EAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAA;YAC3D,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;gBACb,OAAO,gDAAgD,IAAA,iBAAS,EAC9D,KAAK,CAAC,QAAQ,EACd,MAAM,CACP,qBAAqB,IAAI,CAAC,MAAM,cAAc,CAAA;YACjD,CAAC;YAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAA;YAClC,MAAM,WAAW,GAAG,uBAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;YACpD,IAAI,IAAA,eAAM,EAAC,WAAW,CAAC,EAAE,CAAC;gBACxB,OAAO,gCAAgC,CAAA;YACzC,CAAC;YAED,MAAM,iBAAiB,GAAG,MAAM,kCAAuB,CAAC,sBAAsB,CAC5E,mBAAmB,EACnB,IAAA,mBAAW,EAAC,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,EACpC,WAAW,CAAC,KAAK,CAAC,SAAS,EAC3B,MAAM,CACP,CAAA;YAED,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBACvB,OAAO,0CAA0C,CAAA;YACnD,CAAC;YAED,MAAM,kBAAkB,GAAG,wBAAgB,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;YAC3E,IAAI,IAAA,eAAM,EAAC,kBAAkB,CAAC,EAAE,CAAC;gBAC/B,OAAO,qCAAqC,CAAA;YAC9C,CAAC;YAED,IAAI,kBAAkB,CAAC,KAAK,CAAC,QAAQ,KAAK,KAAK,CAAC,QAAQ,EAAE,CAAC;gBACzD,OAAO,wBAAwB,CAAA;YACjC,CAAC;YAED,OAAM;QACR,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,kCAAkC,GAAG,KAAK,CAAA;QACnD,CAAC;IACH,CAAC;CAAA;AA5CD,gDA4CC;AAEM,MAAM,kBAAkB,GAAG,CAAC,QAAgB,EAAgB,EAAE,CAAC,CAAC;IACrE,QAAQ;IACR,SAAS,EAAE,IAAA,WAAG,GAAE;IAChB,IAAI,EAAE,kBAAU,CAAC,OAAO;CACzB,CAAC,CAAA;AAJW,QAAA,kBAAkB,sBAI7B"} \ No newline at end of file diff --git a/packages/sdk/metadata-claims/lib/metadata.d.ts b/packages/sdk/metadata-claims/lib/metadata.d.ts new file mode 100644 index 000000000..ae5bcd7d0 --- /dev/null +++ b/packages/sdk/metadata-claims/lib/metadata.d.ts @@ -0,0 +1,75 @@ +import { Address } from '@celo/base/lib/address'; +import { Signer } from '@celo/base/lib/signatureUtils'; +import * as t from 'io-ts'; +import { Claim, ClaimPayload } from './claim'; +import { AccountMetadataSignerGetters, ClaimTypes } from './types'; +export { ClaimTypes } from './types'; +type KitOrAccountsWrapper = AccountMetadataSignerGetters; +export declare const IdentityMetadataType: t.TypeC<{ + claims: t.ArrayC, t.TypeC<{ + type: t.LiteralC; + timestamp: t.NumberC; + domain: t.StringC; + }>, t.TypeC<{ + type: t.LiteralC; + timestamp: t.NumberC; + username: t.StringC; + }>, t.TypeC<{ + type: t.LiteralC; + timestamp: t.NumberC; + name: t.StringC; + }>, t.TypeC<{ + type: t.LiteralC; + timestamp: t.NumberC; + address: t.StringC; + filteredDataPaths: t.StringC; + }>]>>; + meta: t.TypeC<{ + address: t.Type; + signature: t.StringC; + }>; +}>; +export type IdentityMetadata = t.TypeOf; +export declare class IdentityMetadataWrapper { + data: IdentityMetadata; + static fromEmpty(address: Address): IdentityMetadataWrapper; + static fetchFromURL(contractKitOrAccountsWrapper: KitOrAccountsWrapper, url: string, tries?: number): Promise; + static fromFile(contractKitOrAccountsWrapper: KitOrAccountsWrapper, path: string): Promise; + static verifySigner(contractKitOrAccountsWrapper: KitOrAccountsWrapper, hash: any, signature: any, metadata: any): Promise; + static verifySignerForAddress(contractKitOrAccountsWrapper: KitOrAccountsWrapper, hash: any, signature: any, address: Address): Promise; + static fromRawString(contractKitOrAccountsWrapper: KitOrAccountsWrapper, rawData: string): Promise; + constructor(data: IdentityMetadata); + get claims(): ({ + type: ClaimTypes.ACCOUNT; + timestamp: number; + address: string; + publicKey: string | undefined; + } | { + type: ClaimTypes.KEYBASE; + timestamp: number; + username: string; + } | { + type: ClaimTypes.DOMAIN; + timestamp: number; + domain: string; + } | { + type: ClaimTypes.NAME; + timestamp: number; + name: string; + } | { + type: ClaimTypes.STORAGE; + timestamp: number; + address: string; + filteredDataPaths: string; + })[]; + hashOfClaims(): string; + toString(): string; + addClaim(claim: Claim, signer: Signer): Promise; + findClaim(type: K): ClaimPayload | undefined; + filterClaims(type: K): ClaimPayload[]; +} diff --git a/packages/sdk/metadata-claims/lib/metadata.js b/packages/sdk/metadata-claims/lib/metadata.js new file mode 100644 index 000000000..41bbfe0f5 --- /dev/null +++ b/packages/sdk/metadata-claims/lib/metadata.js @@ -0,0 +1,212 @@ +"use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}); +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.IdentityMetadataWrapper = exports.IdentityMetadataType = exports.ClaimTypes = void 0; +const address_1 = require("@celo/base/lib/address"); +const async_1 = require("@celo/base/lib/async"); +const io_1 = require("@celo/utils/lib/io"); +const signatureUtils_1 = require("@celo/utils/lib/signatureUtils"); +const cross_fetch_1 = __importDefault(require("cross-fetch")); +const Either_1 = require("fp-ts/lib/Either"); +const t = __importStar(require("io-ts")); +const PathReporter_1 = require("io-ts/lib/PathReporter"); +const claim_1 = require("./claim"); +const types_1 = require("./types"); +var types_2 = require("./types"); +Object.defineProperty(exports, "ClaimTypes", { enumerable: true, get: function () { return types_2.ClaimTypes; } }); +const MetaType = t.type({ + address: io_1.AddressType, + signature: io_1.SignatureType, +}); +exports.IdentityMetadataType = t.type({ + claims: t.array(claim_1.ClaimType), + meta: MetaType, +}); +class IdentityMetadataWrapper { + static fromEmpty(address) { + return new IdentityMetadataWrapper({ + claims: [], + meta: { + address, + signature: '', + }, + }); + } + static fetchFromURL(contractKitOrAccountsWrapper, url, tries = 3) { + return __awaiter(this, void 0, void 0, function* () { + return (0, async_1.selectiveRetryAsyncWithBackOff)(() => __awaiter(this, void 0, void 0, function* () { + const resp = yield (0, cross_fetch_1.default)(url); + if (!resp.ok) { + throw new Error(`Request failed with status ${resp.status}`); + } + return this.fromRawString(contractKitOrAccountsWrapper, yield resp.text()); + }), tries, ['Request failed with status 404'], []); + }); + } + static fromFile(contractKitOrAccountsWrapper, path) { + let readFileSync; + try { + const fs = require('fs'); + readFileSync = fs.readFileSync; + } + catch (_a) { + console.error('cant read from file in browser or environment without native fs module'); + } + return this.fromRawString(contractKitOrAccountsWrapper, readFileSync(path, 'utf-8')); + } + static verifySigner(contractKitOrAccountsWrapper, hash, signature, metadata) { + return __awaiter(this, void 0, void 0, function* () { + return this.verifySignerForAddress(contractKitOrAccountsWrapper, hash, signature, metadata.address); + }); + } + static verifySignerForAddress(contractKitOrAccountsWrapper, hash, signature, address) { + return __awaiter(this, void 0, void 0, function* () { + // First try to verify on account's address + if (!(0, signatureUtils_1.verifySignature)(hash, signature, address)) { + const accounts = yield getAccounts(contractKitOrAccountsWrapper); + // If this fails, signature may still be one of `address`' signers + if (yield accounts.isAccount(address)) { + const signers = yield Promise.all([ + accounts.getVoteSigner(address), + accounts.getValidatorSigner(address), + accounts.getAttestationSigner(address), + ]); + return signers.some((signer) => (0, signatureUtils_1.verifySignature)(hash, signature, signer)); + } + return false; + } + return true; + }); + } + static fromRawString(contractKitOrAccountsWrapper, rawData) { + return __awaiter(this, void 0, void 0, function* () { + const data = JSON.parse(rawData); + const validatedData = exports.IdentityMetadataType.decode(data); + if ((0, Either_1.isLeft)(validatedData)) { + // TODO: We could probably return a more useful error in the future + throw new Error(PathReporter_1.PathReporter.report(validatedData).join(', ')); + } + // Verify signature on the data + const claims = validatedData.right.claims; + const hash = (0, claim_1.hashOfClaims)(claims); + if (claims.length > 0 && + !(yield this.verifySigner(contractKitOrAccountsWrapper, hash, validatedData.right.meta.signature, validatedData.right.meta))) { + throw new Error(`Signature could not be validated. Guessing signer: ${(0, signatureUtils_1.guessSigner)(hash, validatedData.right.meta.signature)}`); + } + const res = new IdentityMetadataWrapper(validatedData.right); + // Verify that singular claim types appear at most once + types_1.SINGULAR_CLAIM_TYPES.forEach((claimType) => { + const results = res.filterClaims(claimType); + if (results.length > 1) { + throw new Error(`Found ${results.length} claims of type ${claimType}, should be at most 1`); + } + }); + return res; + }); + } + constructor(data) { + this.data = data; + } + get claims() { + return this.data.claims; + } + hashOfClaims() { + return (0, claim_1.hashOfClaims)(this.data.claims); + } + toString() { + return JSON.stringify({ + claims: this.data.claims, + meta: this.data.meta, + }); + } + addClaim(claim, signer) { + return __awaiter(this, void 0, void 0, function* () { + switch (claim.type) { + case types_1.ClaimTypes.ACCOUNT: + if ((0, address_1.eqAddress)(claim.address, this.data.meta.address)) { + throw new Error("Can't claim self"); + } + break; + case types_1.ClaimTypes.DOMAIN: { + const existingClaims = this.data.claims.filter((el) => el.domain === claim.domain); + if (existingClaims.length > 0) { + return existingClaims[0]; + } + break; + } + case types_1.ClaimTypes.KEYBASE: { + const existingClaims = this.data.claims.filter((el) => el.username === claim.username); + if (existingClaims.length > 0) { + return existingClaims[0]; + } + } + default: + break; + } + if (types_1.SINGULAR_CLAIM_TYPES.includes(claim.type)) { + const index = this.data.claims.findIndex((0, claim_1.isOfType)(claim.type)); + if (index !== -1) { + this.data.claims.splice(index, 1); + } + } + this.data.claims.push(claim); + this.data.meta.signature = yield signer.sign(this.hashOfClaims()); + return claim; + }); + } + findClaim(type) { + return this.data.claims.find((0, claim_1.isOfType)(type)); + } + filterClaims(type) { + return this.data.claims.filter((0, claim_1.isOfType)(type)); + } +} +exports.IdentityMetadataWrapper = IdentityMetadataWrapper; +// at first these functions required a `kit` but thats a bit heavy +// as all that is used are functions on the accounts contract so allow just those functions to be passed +function getAccounts(contractKitOrAccountsWrapper) { + return __awaiter(this, void 0, void 0, function* () { + if ('getVoteSigner' in contractKitOrAccountsWrapper && + 'isAccount' in contractKitOrAccountsWrapper && + 'getValidatorSigner' in contractKitOrAccountsWrapper && + 'getAttestationSigner' in contractKitOrAccountsWrapper) { + return contractKitOrAccountsWrapper; + } + throw new Error(`Must pass object with the required functions: getVoteSigner, isAccount, getValidatorSigner, getAttestationSigner. Received ${JSON.stringify(contractKitOrAccountsWrapper)}`); + }); +} +//# sourceMappingURL=metadata.js.map \ No newline at end of file diff --git a/packages/sdk/metadata-claims/lib/metadata.js.map b/packages/sdk/metadata-claims/lib/metadata.js.map new file mode 100644 index 000000000..8d8b4654a --- /dev/null +++ b/packages/sdk/metadata-claims/lib/metadata.js.map @@ -0,0 +1 @@ +{"version":3,"file":"metadata.js","sourceRoot":"","sources":["../src/metadata.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,oDAA2D;AAC3D,gDAAqE;AAErE,2CAA+D;AAC/D,mEAA6E;AAC7E,8DAA+B;AAC/B,6CAAyC;AACzC,yCAA0B;AAC1B,yDAAqD;AACrD,mCAAgF;AAChF,mCAKgB;AAEhB,iCAAoC;AAA3B,mGAAA,UAAU,OAAA;AAInB,MAAM,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAC;IACtB,OAAO,EAAE,gBAAW;IACpB,SAAS,EAAE,kBAAa;CACzB,CAAC,CAAA;AAEW,QAAA,oBAAoB,GAAG,CAAC,CAAC,IAAI,CAAC;IACzC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,iBAAS,CAAC;IAC1B,IAAI,EAAE,QAAQ;CACf,CAAC,CAAA;AAIF,MAAa,uBAAuB;IAGlC,MAAM,CAAC,SAAS,CAAC,OAAgB;QAC/B,OAAO,IAAI,uBAAuB,CAAC;YACjC,MAAM,EAAE,EAAE;YACV,IAAI,EAAE;gBACJ,OAAO;gBACP,SAAS,EAAE,EAAE;aACd;SACF,CAAC,CAAA;IACJ,CAAC;IAED,MAAM,CAAO,YAAY,CACvB,4BAAkD,EAClD,GAAW,EACX,KAAK,GAAG,CAAC;;YAET,OAAO,IAAA,sCAA8B,EACnC,GAAS,EAAE;gBACT,MAAM,IAAI,GAAG,MAAM,IAAA,qBAAK,EAAC,GAAG,CAAC,CAAA;gBAC7B,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;oBACb,MAAM,IAAI,KAAK,CAAC,8BAA8B,IAAI,CAAC,MAAM,EAAE,CAAC,CAAA;gBAC9D,CAAC;gBACD,OAAO,IAAI,CAAC,aAAa,CAAC,4BAA4B,EAAE,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC,CAAA;YAC5E,CAAC,CAAA,EACD,KAAK,EACL,CAAC,gCAAgC,CAAC,EAClC,EAAE,CACH,CAAA;QACH,CAAC;KAAA;IAED,MAAM,CAAC,QAAQ,CAAC,4BAAkD,EAAE,IAAY;QAC9E,IAAI,YAAY,CAAA;QAChB,IAAI,CAAC;YACH,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;YACxB,YAAY,GAAG,EAAE,CAAC,YAAY,CAAA;QAChC,CAAC;QAAC,WAAM,CAAC;YACP,OAAO,CAAC,KAAK,CAAC,wEAAwE,CAAC,CAAA;QACzF,CAAC;QACD,OAAO,IAAI,CAAC,aAAa,CAAC,4BAA4B,EAAE,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAA;IACtF,CAAC;IAED,MAAM,CAAO,YAAY,CACvB,4BAAkD,EAClD,IAAS,EACT,SAAc,EACd,QAAa;;YAEb,OAAO,IAAI,CAAC,sBAAsB,CAChC,4BAA4B,EAC5B,IAAI,EACJ,SAAS,EACT,QAAQ,CAAC,OAAO,CACjB,CAAA;QACH,CAAC;KAAA;IAED,MAAM,CAAO,sBAAsB,CACjC,4BAAkD,EAClD,IAAS,EACT,SAAc,EACd,OAAgB;;YAEhB,2CAA2C;YAC3C,IAAI,CAAC,IAAA,gCAAe,EAAC,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,CAAC;gBAC/C,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,4BAA4B,CAAC,CAAA;gBAChE,kEAAkE;gBAClE,IAAI,MAAM,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;oBACtC,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;wBAChC,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC;wBAC/B,QAAQ,CAAC,kBAAkB,CAAC,OAAO,CAAC;wBACpC,QAAQ,CAAC,oBAAoB,CAAC,OAAO,CAAC;qBACvC,CAAC,CAAA;oBACF,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAA,gCAAe,EAAC,IAAI,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,CAAA;gBAC3E,CAAC;gBACD,OAAO,KAAK,CAAA;YACd,CAAC;YACD,OAAO,IAAI,CAAA;QACb,CAAC;KAAA;IAED,MAAM,CAAO,aAAa,CAAC,4BAAkD,EAAE,OAAe;;YAC5F,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;YAEhC,MAAM,aAAa,GAAG,4BAAoB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;YAEvD,IAAI,IAAA,eAAM,EAAC,aAAa,CAAC,EAAE,CAAC;gBAC1B,mEAAmE;gBACnE,MAAM,IAAI,KAAK,CAAC,2BAAY,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;YAChE,CAAC;YAED,+BAA+B;YAC/B,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,MAAM,CAAA;YACzC,MAAM,IAAI,GAAG,IAAA,oBAAY,EAAC,MAAM,CAAC,CAAA;YACjC,IACE,MAAM,CAAC,MAAM,GAAG,CAAC;gBACjB,CAAC,CAAC,MAAM,IAAI,CAAC,YAAY,CACvB,4BAA4B,EAC5B,IAAI,EACJ,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,EAClC,aAAa,CAAC,KAAK,CAAC,IAAI,CACzB,CAAC,EACF,CAAC;gBACD,MAAM,IAAI,KAAK,CACb,sDAAsD,IAAA,4BAAW,EAC/D,IAAI,EACJ,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CACnC,EAAE,CACJ,CAAA;YACH,CAAC;YAED,MAAM,GAAG,GAAG,IAAI,uBAAuB,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA;YAE5D,uDAAuD;YACvD,4BAAoB,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE;gBACzC,MAAM,OAAO,GAAG,GAAG,CAAC,YAAY,CAAC,SAAS,CAAC,CAAA;gBAC3C,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACvB,MAAM,IAAI,KAAK,CAAC,SAAS,OAAO,CAAC,MAAM,mBAAmB,SAAS,uBAAuB,CAAC,CAAA;gBAC7F,CAAC;YACH,CAAC,CAAC,CAAA;YAEF,OAAO,GAAG,CAAA;QACZ,CAAC;KAAA;IAED,YAAY,IAAsB;QAChC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;IAClB,CAAC;IAED,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAA;IACzB,CAAC;IAED,YAAY;QACV,OAAO,IAAA,oBAAY,EAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IACvC,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,SAAS,CAAC;YACpB,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM;YACxB,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI;SACrB,CAAC,CAAA;IACJ,CAAC;IAEK,QAAQ,CAAC,KAAY,EAAE,MAAc;;YACzC,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;gBACnB,KAAK,kBAAU,CAAC,OAAO;oBACrB,IAAI,IAAA,mBAAS,EAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;wBACrD,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAA;oBACrC,CAAC;oBACD,MAAK;gBACP,KAAK,kBAAU,CAAC,MAAM,CAAC,CAAC,CAAC;oBACvB,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAO,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,CAAC,CAAA;oBACvF,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBAC9B,OAAO,cAAc,CAAC,CAAC,CAAC,CAAA;oBAC1B,CAAC;oBACD,MAAK;gBACP,CAAC;gBACD,KAAK,kBAAU,CAAC,OAAO,CAAC,CAAC,CAAC;oBACxB,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAO,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,KAAK,KAAK,CAAC,QAAQ,CAAC,CAAA;oBAC3F,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBAC9B,OAAO,cAAc,CAAC,CAAC,CAAC,CAAA;oBAC1B,CAAC;gBACH,CAAC;gBACD;oBACE,MAAK;YACT,CAAC;YAED,IAAI,4BAAoB,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC9C,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAA,gBAAQ,EAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAA;gBAC9D,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;oBACjB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;gBACnC,CAAC;YACH,CAAC;YAED,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YAC5B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAA;YACjE,OAAO,KAAK,CAAA;QACd,CAAC;KAAA;IAED,SAAS,CAAuB,IAAO;QACrC,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAA,gBAAQ,EAAC,IAAI,CAAC,CAAC,CAAA;IAC9C,CAAC;IAED,YAAY,CAAuB,IAAO;QACxC,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAA,gBAAQ,EAAC,IAAI,CAAC,CAAC,CAAA;IAChD,CAAC;CACF;AAzLD,0DAyLC;AAED,kEAAkE;AAClE,wGAAwG;AACxG,SAAe,WAAW,CACxB,4BAAkD;;QAElD,IACE,eAAe,IAAI,4BAA4B;YAC/C,WAAW,IAAI,4BAA4B;YAC3C,oBAAoB,IAAI,4BAA4B;YACpD,sBAAsB,IAAI,4BAA4B,EACtD,CAAC;YACD,OAAO,4BAA4B,CAAA;QACrC,CAAC;QACD,MAAM,IAAI,KAAK,CACb,8HAA8H,IAAI,CAAC,SAAS,CAC1I,4BAA4B,CAC7B,EAAE,CACJ,CAAA;IACH,CAAC;CAAA"} \ No newline at end of file diff --git a/packages/sdk/metadata-claims/lib/types.d.ts b/packages/sdk/metadata-claims/lib/types.d.ts new file mode 100644 index 000000000..d21e1e654 --- /dev/null +++ b/packages/sdk/metadata-claims/lib/types.d.ts @@ -0,0 +1,26 @@ +import * as t from 'io-ts'; +import type { Address, StrongAddress } from '@celo/base/lib/address'; +export declare const SignatureType: t.StringC; +export declare const TimestampType: t.NumberC; +/** @internal */ +export declare const now: () => number; +export declare enum ClaimTypes { + ACCOUNT = "ACCOUNT", + DOMAIN = "DOMAIN", + KEYBASE = "KEYBASE", + NAME = "NAME", + PROFILE_PICTURE = "PROFILE_PICTURE", + STORAGE = "STORAGE", + TWITTER = "TWITTER" +} +export declare const VERIFIABLE_CLAIM_TYPES: ClaimTypes[]; +export declare const SINGULAR_CLAIM_TYPES: ClaimTypes[]; +export type AccountSignerGetters = { + isAccount: (address: Address) => Promise; + getVoteSigner: (address: Address) => Promise; + getValidatorSigner: (address: Address) => Promise; + getAttestationSigner: (address: Address) => Promise; +}; +export type AccountMetadataSignerGetters = { + getMetadataURL: (address: string) => Promise; +} & AccountSignerGetters; diff --git a/packages/sdk/metadata-claims/lib/types.js b/packages/sdk/metadata-claims/lib/types.js new file mode 100644 index 000000000..4058c986c --- /dev/null +++ b/packages/sdk/metadata-claims/lib/types.js @@ -0,0 +1,45 @@ +"use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}); +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.SINGULAR_CLAIM_TYPES = exports.VERIFIABLE_CLAIM_TYPES = exports.ClaimTypes = exports.now = exports.TimestampType = exports.SignatureType = void 0; +const t = __importStar(require("io-ts")); +exports.SignatureType = t.string; +exports.TimestampType = t.number; +/** @internal */ +const now = () => Math.round(new Date().getTime() / 1000); +exports.now = now; +var ClaimTypes; +(function (ClaimTypes) { + ClaimTypes["ACCOUNT"] = "ACCOUNT"; + ClaimTypes["DOMAIN"] = "DOMAIN"; + ClaimTypes["KEYBASE"] = "KEYBASE"; + ClaimTypes["NAME"] = "NAME"; + ClaimTypes["PROFILE_PICTURE"] = "PROFILE_PICTURE"; + ClaimTypes["STORAGE"] = "STORAGE"; + ClaimTypes["TWITTER"] = "TWITTER"; +})(ClaimTypes || (exports.ClaimTypes = ClaimTypes = {})); +exports.VERIFIABLE_CLAIM_TYPES = [ClaimTypes.KEYBASE, ClaimTypes.ACCOUNT, ClaimTypes.DOMAIN]; +exports.SINGULAR_CLAIM_TYPES = [ClaimTypes.NAME]; +//# sourceMappingURL=types.js.map \ No newline at end of file diff --git a/packages/sdk/metadata-claims/lib/types.js.map b/packages/sdk/metadata-claims/lib/types.js.map new file mode 100644 index 000000000..9deb63c88 --- /dev/null +++ b/packages/sdk/metadata-claims/lib/types.js.map @@ -0,0 +1 @@ +{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yCAA0B;AAIb,QAAA,aAAa,GAAG,CAAC,CAAC,MAAM,CAAA;AACxB,QAAA,aAAa,GAAG,CAAC,CAAC,MAAM,CAAA;AAErC,gBAAgB;AACT,MAAM,GAAG,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAA;AAAnD,QAAA,GAAG,OAAgD;AAEhE,IAAY,UAQX;AARD,WAAY,UAAU;IACpB,iCAAmB,CAAA;IACnB,+BAAiB,CAAA;IACjB,iCAAmB,CAAA;IACnB,2BAAa,CAAA;IACb,iDAAmC,CAAA;IACnC,iCAAmB,CAAA;IACnB,iCAAmB,CAAA;AACrB,CAAC,EARW,UAAU,0BAAV,UAAU,QAQrB;AAEY,QAAA,sBAAsB,GAAG,CAAC,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC,MAAM,CAAC,CAAA;AACpF,QAAA,oBAAoB,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA"} \ No newline at end of file diff --git a/packages/sdk/metadata-claims/lib/verify.d.ts b/packages/sdk/metadata-claims/lib/verify.d.ts new file mode 100644 index 000000000..6a87b4489 --- /dev/null +++ b/packages/sdk/metadata-claims/lib/verify.d.ts @@ -0,0 +1,20 @@ +/// +import { AccountClaim } from './account'; +import { Claim, DomainClaim } from './claim'; +import { AccountMetadataSignerGetters } from './types'; +/** + * Verifies a claim made by an account, i.e. whether a claim can be verified to be correct + * @param kit AccountMetadataSignerGetters object + * @param claim The claim to verify + * @param address The address that is making the claim + * @returns If valid, returns undefined. If invalid or unable to verify, returns a string with the error + */ +export declare function verifyClaim(accountMeta: AccountMetadataSignerGetters, claim: Claim, address: string, tries?: number): Promise; +export declare const verifyAccountClaim: (accountMeta: AccountMetadataSignerGetters, claim: AccountClaim, address: string, tries?: number) => Promise; +type dnsResolverFunction = (hostname: string, callback: (err: NodeJS.ErrnoException, addresses: string[][]) => void) => void; +/** + * It verifies if a DNS domain includes in the TXT records an entry with name + * `celo-site-verification` and a valid signature in base64 + */ +export declare const verifyDomainRecord: (accountMeta: AccountMetadataSignerGetters, claim: DomainClaim, address: string, dnsResolver?: dnsResolverFunction) => Promise; +export {}; diff --git a/packages/sdk/metadata-claims/lib/verify.js b/packages/sdk/metadata-claims/lib/verify.js new file mode 100644 index 000000000..0b8fa8f1f --- /dev/null +++ b/packages/sdk/metadata-claims/lib/verify.js @@ -0,0 +1,89 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.verifyDomainRecord = exports.verifyAccountClaim = exports.verifyClaim = void 0; +const address_1 = require("@celo/base/lib/address"); +const io_1 = require("@celo/base/lib/io"); +const node_dns_1 = require("node:dns"); // TODO replace with non node specifc package +const node_util_1 = require("node:util"); // TODO replace with non node specifc package +const claim_1 = require("./claim"); +const keybase_1 = require("./keybase"); +const metadata_1 = require("./metadata"); +const types_1 = require("./types"); +/** + * Verifies a claim made by an account, i.e. whether a claim can be verified to be correct + * @param kit AccountMetadataSignerGetters object + * @param claim The claim to verify + * @param address The address that is making the claim + * @returns If valid, returns undefined. If invalid or unable to verify, returns a string with the error + */ +function verifyClaim(accountMeta, claim, address, tries = 3) { + return __awaiter(this, void 0, void 0, function* () { + switch (claim.type) { + case types_1.ClaimTypes.KEYBASE: + return (0, keybase_1.verifyKeybaseClaim)(accountMeta, claim, address); + case types_1.ClaimTypes.ACCOUNT: + return (0, exports.verifyAccountClaim)(accountMeta, claim, address, tries); + case types_1.ClaimTypes.DOMAIN: + return (0, exports.verifyDomainRecord)(accountMeta, claim, address); + default: + break; + } + return; + }); +} +exports.verifyClaim = verifyClaim; +const verifyAccountClaim = (accountMeta, claim, address, tries = 3) => __awaiter(void 0, void 0, void 0, function* () { + const metadataURL = yield accountMeta.getMetadataURL(claim.address); + if (!(0, io_1.isValidUrl)(metadataURL)) { + return `Metadata URL of ${claim.address} could not be retrieved`; + } + let metadata; + try { + metadata = yield metadata_1.IdentityMetadataWrapper.fetchFromURL(accountMeta, metadataURL, tries); + } + catch (error) { + return `Metadata could not be fetched for ${claim.address} at ${metadataURL}: ${error.toString()}`; + } + const accountClaims = metadata.filterClaims(types_1.ClaimTypes.ACCOUNT); + if (accountClaims.find((x) => (0, address_1.eqAddress)(x.address, address)) === undefined) { + return `${claim.address} did not claim ${address}`; + } + return; +}); +exports.verifyAccountClaim = verifyAccountClaim; +/** + * It verifies if a DNS domain includes in the TXT records an entry with name + * `celo-site-verification` and a valid signature in base64 + */ +const verifyDomainRecord = (accountMeta, claim, address, dnsResolver = node_dns_1.resolveTxt) => __awaiter(void 0, void 0, void 0, function* () { + try { + const getRecords = (0, node_util_1.promisify)(dnsResolver); + const domainRecords = yield getRecords(claim.domain); + for (const record of domainRecords) { + for (const entry of record) { + if (entry.startsWith(claim_1.DOMAIN_TXT_HEADER)) { + const signatureBase64 = entry.substring(claim_1.DOMAIN_TXT_HEADER.length + 1); + const signature = Buffer.from(signatureBase64, 'base64').toString('binary'); + if (yield metadata_1.IdentityMetadataWrapper.verifySignerForAddress(accountMeta, (0, claim_1.serializeClaim)(claim), signature, address)) { + return; + } + } + } + } + return `Unable to verify domain claim with address ${address}`; + } + catch (error) { + return `Unable to fetch domain TXT records: ${error.toString()}`; + } +}); +exports.verifyDomainRecord = verifyDomainRecord; +//# sourceMappingURL=verify.js.map \ No newline at end of file diff --git a/packages/sdk/metadata-claims/lib/verify.js.map b/packages/sdk/metadata-claims/lib/verify.js.map new file mode 100644 index 000000000..5f301444a --- /dev/null +++ b/packages/sdk/metadata-claims/lib/verify.js.map @@ -0,0 +1 @@ +{"version":3,"file":"verify.js","sourceRoot":"","sources":["../src/verify.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,oDAAkD;AAClD,0CAA8C;AAC9C,uCAAqC,CAAC,6CAA6C;AACnF,yCAAqC,CAAC,6CAA6C;AAEnF,mCAA+E;AAC/E,uCAA8C;AAC9C,yCAAoD;AACpD,mCAAkE;AAElE;;;;;;GAMG;AACH,SAAsB,WAAW,CAC/B,WAAyC,EACzC,KAAY,EACZ,OAAe,EACf,KAAK,GAAG,CAAC;;QAET,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;YACnB,KAAK,kBAAU,CAAC,OAAO;gBACrB,OAAO,IAAA,4BAAkB,EAAC,WAAW,EAAE,KAAK,EAAE,OAAO,CAAC,CAAA;YACxD,KAAK,kBAAU,CAAC,OAAO;gBACrB,OAAO,IAAA,0BAAkB,EAAC,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,CAAA;YAC/D,KAAK,kBAAU,CAAC,MAAM;gBACpB,OAAO,IAAA,0BAAkB,EAAC,WAAW,EAAE,KAAK,EAAE,OAAO,CAAC,CAAA;YACxD;gBACE,MAAK;QACT,CAAC;QACD,OAAM;IACR,CAAC;CAAA;AAjBD,kCAiBC;AAEM,MAAM,kBAAkB,GAAG,CAChC,WAAyC,EACzC,KAAmB,EACnB,OAAe,EACf,KAAK,GAAG,CAAC,EACT,EAAE;IACF,MAAM,WAAW,GAAG,MAAM,WAAW,CAAC,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;IAEnE,IAAI,CAAC,IAAA,eAAU,EAAC,WAAW,CAAC,EAAE,CAAC;QAC7B,OAAO,mBAAmB,KAAK,CAAC,OAAO,yBAAyB,CAAA;IAClE,CAAC;IAED,IAAI,QAAiC,CAAA;IACrC,IAAI,CAAC;QACH,QAAQ,GAAG,MAAM,kCAAuB,CAAC,YAAY,CAAC,WAAW,EAAE,WAAW,EAAE,KAAK,CAAC,CAAA;IACxF,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,qCACL,KAAK,CAAC,OACR,OAAO,WAAW,KAAK,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAA;IAC3C,CAAC;IAED,MAAM,aAAa,GAAG,QAAQ,CAAC,YAAY,CAAC,kBAAU,CAAC,OAAO,CAAC,CAAA;IAE/D,IAAI,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAA,mBAAS,EAAC,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;QAC3E,OAAO,GAAG,KAAK,CAAC,OAAO,kBAAkB,OAAO,EAAE,CAAA;IACpD,CAAC;IAED,OAAM;AACR,CAAC,CAAA,CAAA;AA5BY,QAAA,kBAAkB,sBA4B9B;AAOD;;;GAGG;AACI,MAAM,kBAAkB,GAAG,CAChC,WAAyC,EACzC,KAAkB,EAClB,OAAe,EACf,cAAmC,qBAAiB,EACpD,EAAE;IACF,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,IAAA,qBAAS,EAAC,WAAW,CAAC,CAAA;QACzC,MAAM,aAAa,GAAG,MAAM,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;QACpD,KAAK,MAAM,MAAM,IAAI,aAAa,EAAE,CAAC;YACnC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBAC3B,IAAI,KAAK,CAAC,UAAU,CAAC,yBAAiB,CAAC,EAAE,CAAC;oBACxC,MAAM,eAAe,GAAG,KAAK,CAAC,SAAS,CAAC,yBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;oBACrE,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;oBAC3E,IACE,MAAM,kCAAuB,CAAC,sBAAsB,CAClD,WAAW,EACX,IAAA,sBAAc,EAAC,KAAK,CAAC,EACrB,SAAS,EACT,OAAO,CACR,EACD,CAAC;wBACD,OAAM;oBACR,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,8CAA8C,OAAO,EAAE,CAAA;IAChE,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,uCAAuC,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAA;IAClE,CAAC;AACH,CAAC,CAAA,CAAA;AA/BY,QAAA,kBAAkB,sBA+B9B"} \ No newline at end of file diff --git a/packages/sdk/utils/src/contacts.ts b/packages/sdk/utils/src/contacts.ts deleted file mode 100644 index c5b85baba..000000000 --- a/packages/sdk/utils/src/contacts.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { MinimalContact } from '@celo/base/lib/contacts' -import { keccak256 } from 'web3-utils' - -// Exports moved to @celo/base, forwarding them -// here for backwards compatibility -export { - ContactPhoneNumber, - getContactPhoneNumber, - isContact, - MinimalContact, -} from '@celo/base/lib/contacts' - -/** - * @deprecated May be removed in future - */ -export const getContactNameHash = (contact: MinimalContact) => { - if (!contact) { - throw new Error('Invalid contact') - } - - return keccak256(contact.displayName || '') -} diff --git a/packages/sdk/utils/src/currencies.ts b/packages/sdk/utils/src/currencies.ts deleted file mode 100644 index eaba79f5e..000000000 --- a/packages/sdk/utils/src/currencies.ts +++ /dev/null @@ -1,9 +0,0 @@ -// Exports moved to @celo/base, forwarding them -// here for backwards compatibility -export { - CURRENCIES, - currencyToShortMap, - CURRENCY_ENUM, - resolveCurrency, - SHORT_CURRENCIES, -} from '@celo/base/lib/currencies' diff --git a/packages/sdk/utils/src/displayFormatting.ts b/packages/sdk/utils/src/displayFormatting.ts deleted file mode 100644 index 9b612e3cc..000000000 --- a/packages/sdk/utils/src/displayFormatting.ts +++ /dev/null @@ -1,3 +0,0 @@ -// Exports moved to @celo/base, forwarding them -// here for backwards compatibility -export { getErrorMessage } from '@celo/base/lib/displayFormatting' diff --git a/packages/sdk/utils/src/index.ts b/packages/sdk/utils/src/index.ts index f1699972c..ad903fba4 100644 --- a/packages/sdk/utils/src/index.ts +++ b/packages/sdk/utils/src/index.ts @@ -1,7 +1,4 @@ import * as AddressUtils from './address' - -export * from './contacts' -export * from './currencies' export { ECIES } from './ecies' export { IstanbulUtils } from './istanbul' export { SignatureUtils } from './signatureUtils' From 54741cc01ef0a6716bdd45a955ac65c7ecced6c1 Mon Sep 17 00:00:00 2001 From: Aaron DeRuvo Date: Wed, 2 Oct 2024 11:57:37 +0200 Subject: [PATCH 05/54] remove identity commands from cli (#343) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ### Description As proposed in https://forum.celo.org/c/announcements/5 we are removing these identity related commands. Wait to merge till October ### Tested n.a ### Related issues - Fixes https://github.com/celo-org/celo-blockchain-planning/issues/432 ### Backwards compatibility a breaking change ### Documentation hopefully not --- ## PR-Codex overview This PR focuses on the removal of the `identity:identifier` and `identity:get-attestations` commands from the CLI, along with updates to the documentation reflecting these changes. ### Detailed summary - Deleted files: - `packages/cli/src/commands/identity/identifier.ts` - `packages/cli/src/commands/identity/get-attestations.ts` - `packages/cli/src/commands/identity/get-attestations.test.ts` - Updated `docs/command-line-interface/identity.md` to remove references to the deleted commands. - Added a note about the deprecation of these commands with a link to the relevant forum discussion. > ✨ Ask PR-Codex anything about this PR by commenting with `/codex {your question}` --- .changeset/moody-falcons-remain.md | 8 ++ docs/command-line-interface/identity.md | 85 -------------- .../identity/get-attestations.test.ts | 62 ---------- .../src/commands/identity/get-attestations.ts | 106 ------------------ .../cli/src/commands/identity/identifier.ts | 63 ----------- 5 files changed, 8 insertions(+), 316 deletions(-) create mode 100644 .changeset/moody-falcons-remain.md delete mode 100644 packages/cli/src/commands/identity/get-attestations.test.ts delete mode 100644 packages/cli/src/commands/identity/get-attestations.ts delete mode 100644 packages/cli/src/commands/identity/identifier.ts diff --git a/.changeset/moody-falcons-remain.md b/.changeset/moody-falcons-remain.md new file mode 100644 index 000000000..02ec211be --- /dev/null +++ b/.changeset/moody-falcons-remain.md @@ -0,0 +1,8 @@ +--- +'@celo/celocli': major +--- +Remove commands identity:identifier, identity:get-attestations + +See https://forum.celo.org/t/rfc-deprecation-of-celocli-identity-commands/8676 + + diff --git a/docs/command-line-interface/identity.md b/docs/command-line-interface/identity.md index c9b458a23..19f654b55 100644 --- a/docs/command-line-interface/identity.md +++ b/docs/command-line-interface/identity.md @@ -3,93 +3,8 @@ Interact with ODIS and the attestations service -* [`celocli identity:get-attestations`](#celocli-identityget-attestations) -* [`celocli identity:identifier`](#celocli-identityidentifier) * [`celocli identity:withdraw-attestation-rewards`](#celocli-identitywithdraw-attestation-rewards) -## `celocli identity:get-attestations` - -Looks up attestations associated with the provided phone number. If a pepper is not provided, it uses the --from account's balance to query the pepper. - -``` -USAGE - $ celocli identity:get-attestations [--gasCurrency - 0x1234567890123456789012345678901234567890] [--globalHelp] [--phoneNumber ] - [--from 0xc1912fEE45d61C87Cc5EA59DaE31190FFFFf232d] [--pepper ] [--identifier - ] [--network ] - -FLAGS - --from=0xc1912fEE45d61C87Cc5EA59DaE31190FFFFf232d Account whose balance to use - for querying ODIS for the - pepper lookup - --gasCurrency=0x1234567890123456789012345678901234567890 Use a specific gas currency - for transaction fees - (defaults to CELO if no gas - currency is supplied). It - must be a whitelisted token. - --globalHelp View all available global - flags - --identifier= On-chain identifier - --network= The ODIS service to hit: - mainnet, alfajores, - alfajoresstaging - --pepper= ODIS phone number pepper - --phoneNumber= Phone number to check - attestations for - -DESCRIPTION - Looks up attestations associated with the provided phone number. If a pepper is not - provided, it uses the --from account's balance to query the pepper. - -EXAMPLES - get-attestations --phoneNumber +15555555555 --from 0x47e172F6CfB6c7D01C1574fa3E2Be7CC73269D95 - - get-attestations --phoneNumber +15555555555 --pepper XgnKVpplZc0p1 - - get-attestations --identifier 0x4952c9db9c283a62721b13f56c4b5e84a438e2569af3de21cb3440efa8840872 -``` - -_See code: [src/commands/identity/get-attestations.ts](https://github.com/celo-org/developer-tooling/tree/master/packages/cli/src/commands/identity/get-attestations.ts)_ - -## `celocli identity:identifier` - -Queries ODIS for the on-chain identifier and pepper corresponding to a given phone number. - -``` -USAGE - $ celocli identity:identifier --from 0xc1912fEE45d61C87Cc5EA59DaE31190FFFFf232d - --phoneNumber +14152223333 [--gasCurrency - 0x1234567890123456789012345678901234567890] [--globalHelp] [--context ] - -FLAGS - --context= mainnet (default), - alfajores, or - alfajoresstaging - --from=0xc1912fEE45d61C87Cc5EA59DaE31190FFFFf232d (required) The address from - which to perform the query - --gasCurrency=0x1234567890123456789012345678901234567890 Use a specific gas currency - for transaction fees - (defaults to CELO if no gas - currency is supplied). It - must be a whitelisted token. - --globalHelp View all available global - flags - --phoneNumber=+14152223333 (required) The phone number - for which to query the - identifier. Should be in - e164 format with country - code. - -DESCRIPTION - Queries ODIS for the on-chain identifier and pepper corresponding to a given phone - number. - -EXAMPLES - identifier --phoneNumber +14151231234 --from 0x5409ed021d9299bf6814279a6a1411a7e866a631 --context alfajores -``` - -_See code: [src/commands/identity/identifier.ts](https://github.com/celo-org/developer-tooling/tree/master/packages/cli/src/commands/identity/identifier.ts)_ - ## `celocli identity:withdraw-attestation-rewards` Withdraw accumulated attestation rewards for a given currency diff --git a/packages/cli/src/commands/identity/get-attestations.test.ts b/packages/cli/src/commands/identity/get-attestations.test.ts deleted file mode 100644 index 27c71b938..000000000 --- a/packages/cli/src/commands/identity/get-attestations.test.ts +++ /dev/null @@ -1,62 +0,0 @@ -import { newAttestations } from '@celo/abis/web3/Attestations' -import { StrongAddress } from '@celo/base' -import { newKitFromWeb3 } from '@celo/contractkit' -import { WrapperCache } from '@celo/contractkit/lib/contract-cache' -import { AttestationsWrapper } from '@celo/contractkit/lib/wrappers/Attestations' -import { testWithAnvilL1 } from '@celo/dev-utils/lib/anvil-test' -import { deployAttestationsContract } from '@celo/dev-utils/lib/contracts' -import Web3 from 'web3' -import { testLocallyWithWeb3Node } from '../../test-utils/cliUtils' -import GetAttestations from './get-attestations' - -process.env.NO_SYNCCHECK = 'true' - -testWithAnvilL1('identity:get-attetstations', (web3: Web3) => { - beforeEach(async () => { - const kit = newKitFromWeb3(web3) - const accounts = (await web3.eth.getAccounts()) as StrongAddress[] - const attestationsContractAddress = await deployAttestationsContract(web3, accounts[0]) - - jest.spyOn(WrapperCache.prototype, 'getAttestations').mockImplementation(async () => { - return new AttestationsWrapper( - kit.connection, - newAttestations(web3, attestationsContractAddress), - newKitFromWeb3(web3).contracts - ) - }) - }) - - describe('input validation correctly outputs errors', () => { - const consoleOutput: string[] = [] - const mockedError = (output: string) => consoleOutput.push(output) - beforeEach(() => (console.error = mockedError)) - - it('Fails when neither from, pepper, nor identifier are specified', async () => { - await expect( - testLocallyWithWeb3Node(GetAttestations, ['--phoneNumber', '+15555555555'], web3) - ).rejects.toThrow('Must specify either --from or --pepper or --identifier') - }) - - it('Fails when neither phone number nor identifier are specified', async () => { - await expect( - testLocallyWithWeb3Node( - GetAttestations, - ['--from', '0x47e172F6CfB6c7D01C1574fa3E2Be7CC73269D95'], - web3 - ) - ).rejects.toThrow('Must specify phoneNumber if identifier not provided') - }) - - it('Successfully prints identifier when given pepper and number', async () => { - console.log = jest.fn() - await testLocallyWithWeb3Node( - GetAttestations, - ['--phoneNumber', '+15555555555', '--pepper', 'XQke2bjvN7mPt'], - web3 - ) - expect(console.log).toHaveBeenCalledWith( - 'Identifier: 0xd9460ae529b2889716c8f1ccebb5efec945adc46fe1e9cd16f6242463e81f37c' - ) - }) - }) -}) diff --git a/packages/cli/src/commands/identity/get-attestations.ts b/packages/cli/src/commands/identity/get-attestations.ts deleted file mode 100644 index 223b752c0..000000000 --- a/packages/cli/src/commands/identity/get-attestations.ts +++ /dev/null @@ -1,106 +0,0 @@ -import { ContractKit } from '@celo/contractkit' -import { OdisUtils } from '@celo/identity' -import { AuthSigner, OdisContextName } from '@celo/identity/lib/odis/query' -import { Flags } from '@oclif/core' -import { BaseCommand } from '../../base' -import { CustomFlags } from '../../utils/command' - -export default class GetAttestations extends BaseCommand { - static description = - "Looks up attestations associated with the provided phone number. If a pepper is not provided, it uses the --from account's balance to query the pepper." - - static flags = { - ...BaseCommand.flags, - phoneNumber: Flags.string({ - required: false, - description: 'Phone number to check attestations for', - }), - from: CustomFlags.address({ - required: false, - description: 'Account whose balance to use for querying ODIS for the pepper lookup', - }), - pepper: Flags.string({ - required: false, - description: 'ODIS phone number pepper', - }), - identifier: Flags.string({ - required: false, - description: 'On-chain identifier', - }), - network: Flags.string({ - required: false, - description: 'The ODIS service to hit: mainnet, alfajores, alfajoresstaging', - }), - } - - static examples = [ - 'get-attestations --phoneNumber +15555555555 --from 0x47e172F6CfB6c7D01C1574fa3E2Be7CC73269D95', - 'get-attestations --phoneNumber +15555555555 --pepper XgnKVpplZc0p1', - 'get-attestations --identifier 0x4952c9db9c283a62721b13f56c4b5e84a438e2569af3de21cb3440efa8840872', - ] - - async run() { - const kit = await this.getKit() - const res = await this.parse(GetAttestations) - const phoneNumber = res.flags.phoneNumber - const account = res.flags.from - let identifier = res.flags.identifier - let pepper = res.flags.pepper - if (!account && !pepper && !identifier) { - throw Error('Must specify either --from or --pepper or --identifier') - } - const network = res.flags.network - const attestationsContract = await kit.contracts.getAttestations() - const accountsContract = await kit.contracts.getAccounts() - - if (!identifier) { - if (!phoneNumber) { - throw Error('Must specify phoneNumber if identifier not provided') - } - // Get Phone number pepper - // Needs a balance to perform query - if (!pepper) { - pepper = await this.getPhoneNumberPepper(kit, phoneNumber!, account!, network) - console.log('Pepper: ' + pepper) - } - - const computedIdentifier = kit.connection.web3.utils.soliditySha3({ - type: 'string', - value: 'tel://' + phoneNumber + '__' + pepper, - }) - identifier = computedIdentifier! - console.log('Identifier: ' + identifier) - } - const accounts = await attestationsContract.lookupAccountsForIdentifier(identifier) - accounts.forEach(async (accountAddress) => { - console.log('Account address: ' + accountAddress) - console.log('\tWallet address: ' + (await accountsContract.getWalletAddress(accountAddress))) - console.log( - '\tData-Encryption Key: ' + (await accountsContract.getDataEncryptionKey(accountAddress)) - ) - }) - } - - async getPhoneNumberPepper( - kit: ContractKit, - phoneNumber: string, - account: string, - network: string = 'mainnet' - ): Promise { - console.log('Using network: ' + network) - const authSigner: AuthSigner = { - authenticationMethod: OdisUtils.Query.AuthenticationMethod.WALLET_KEY, - // @ts-ignore -- TODO: if identity depends on diff version of ck which has a slightly different type this complains - contractKit: kit, - } - - const ret = await OdisUtils.PhoneNumberIdentifier.getPhoneNumberIdentifier( - phoneNumber, - account, - authSigner, - OdisUtils.Query.getServiceContext(network as OdisContextName) - ) - - return ret.pepper - } -} diff --git a/packages/cli/src/commands/identity/identifier.ts b/packages/cli/src/commands/identity/identifier.ts deleted file mode 100644 index 879f516f2..000000000 --- a/packages/cli/src/commands/identity/identifier.ts +++ /dev/null @@ -1,63 +0,0 @@ -import { OdisUtils } from '@celo/identity' -import { AuthSigner, OdisContextName } from '@celo/identity/lib/odis/query' -import { Flags, ux } from '@oclif/core' -import { BaseCommand } from '../../base' -import { newCheckBuilder } from '../../utils/checks' -import { printValueMap } from '../../utils/cli' -import { CustomFlags } from '../../utils/command' - -export default class IdentifierQuery extends BaseCommand { - static description = - 'Queries ODIS for the on-chain identifier and pepper corresponding to a given phone number.' - - static flags = { - ...BaseCommand.flags, - from: CustomFlags.address({ - required: true, - description: 'The address from which to perform the query', - }), - phoneNumber: CustomFlags.phoneNumber({ - required: true, - description: - 'The phone number for which to query the identifier. Should be in e164 format with country code.', - }), - context: Flags.string({ - required: false, - description: 'mainnet (default), alfajores, or alfajoresstaging', - }), - } - - static examples = [ - 'identifier --phoneNumber +14151231234 --from 0x5409ed021d9299bf6814279a6a1411a7e866a631 --context alfajores', - ] - - async run() { - const kit = await this.getKit() - const { flags } = await this.parse(IdentifierQuery) - const { phoneNumber, from, context } = flags - - await newCheckBuilder(this).isValidAddress(flags.from).runChecks() - - ux.action.start('Querying ODIS for identifier') - - const authSigner: AuthSigner = { - authenticationMethod: OdisUtils.Query.AuthenticationMethod.WALLET_KEY, - // @ts-ignore -- TODO: if identity depends on diff version of ck which has a slightly differnt type this complains - contractKit: kit, - } - - const res = await OdisUtils.PhoneNumberIdentifier.getPhoneNumberIdentifier( - phoneNumber, - from, - authSigner, - OdisUtils.Query.getServiceContext(context as OdisContextName) - ) - - ux.action.stop() - - printValueMap({ - identifier: res.phoneHash, - pepper: res.pepper, - }) - } -} From d3b88fd4aca95f02a26efdf2d2e196c4306bb23d Mon Sep 17 00:00:00 2001 From: Leszek Stachowski Date: Fri, 4 Oct 2024 09:54:10 +0200 Subject: [PATCH 06/54] Fix master (#354) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes master --- ## PR-Codex overview This PR updates the `yarn.lock` file by removing the block for `@celo/wallet-rpc` and its associated dependencies, while retaining the entry for `@chainsafe/as-sha256`. ### Detailed summary - Removed block for `@celo/wallet-rpc@workspace:packages/sdk/wallets/wallet-rpc` including: - Version and resolution details - Dependencies such as `@celo/base`, `@celo/connect`, and others - Retained entry for `@chainsafe/as-sha256@npm:^0.3.1` with version 0.3.1. > ✨ Ask PR-Codex anything about this PR by commenting with `/codex {your question}` --- yarn.lock | 21 --------------------- 1 file changed, 21 deletions(-) diff --git a/yarn.lock b/yarn.lock index ff5c0f79c..651bc7e4d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2282,27 +2282,6 @@ __metadata: languageName: unknown linkType: soft -"@celo/wallet-rpc@workspace:packages/sdk/wallets/wallet-rpc": - version: 0.0.0-use.local - resolution: "@celo/wallet-rpc@workspace:packages/sdk/wallets/wallet-rpc" - dependencies: - "@celo/base": "npm:^6.1.0" - "@celo/connect": "npm:^6.0.1" - "@celo/contractkit": "npm:^8.1.1" - "@celo/dev-utils": "npm:0.0.5" - "@celo/typescript": "workspace:^" - "@celo/utils": "npm:^7.0.0" - "@celo/wallet-base": "npm:^6.0.1" - "@celo/wallet-remote": "npm:^6.0.1" - "@types/bn.js": "npm:^5.1.0" - "@types/debug": "npm:^4.1.12" - bignumber.js: "npm:^9.0.0" - bn.js: "npm:^5.1.0" - debug: "npm:^4.1.1" - web3: "npm:1.10.4" - languageName: unknown - linkType: soft - "@chainsafe/as-sha256@npm:^0.3.1": version: 0.3.1 resolution: "@chainsafe/as-sha256@npm:0.3.1" From 6bba5e377cded1c8216c5cd1cadeb4b8b764df55 Mon Sep 17 00:00:00 2001 From: Nicolas Brugneaux Date: Fri, 4 Oct 2024 18:41:40 +0200 Subject: [PATCH 07/54] feat @celo/viem-accounts/ledger (#344) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## PR-Codex overview This PR introduces the `@celo/viem-account-ledger` library, facilitating interactions between Ledger devices and the `viem` framework. It includes type definitions, configurations, and initial implementations for ledger account management. ### Detailed summary - Added `Hex` type definition in `src/types.ts`. - Created initial release notes in `CHANGELOG.md`. - Configured ESLint and TypeScript settings. - Implemented `ledgerToAccount` function in `src/ledger-to-account.ts`. - Added utility functions in `src/utils.ts`. - Created test files for ledger interactions. - Updated `README.md` with installation and usage instructions. > The following files were skipped due to too many changes: `yarn.lock` > ✨ Ask PR-Codex anything about this PR by commenting with `/codex {your question}` --- .changeset/dry-gifts-love.md | 5 + packages/viem-account-ledger/.eslintrc.cjs | 3 + packages/viem-account-ledger/.gitignore | 4 + packages/viem-account-ledger/.npmignore | 16 + packages/viem-account-ledger/CHANGELOG.md | 0 packages/viem-account-ledger/README.md | 55 + .../viem-account-ledger/eslint.tsconfig.json | 4 + packages/viem-account-ledger/package.json | 54 + packages/viem-account-ledger/src/data.ts | 19 + packages/viem-account-ledger/src/index.ts | 5 + .../src/ledger-to-account.test.ts | 100 ++ .../src/ledger-to-account.ts | 68 + .../viem-account-ledger/src/test-utils.ts | 206 +++ packages/viem-account-ledger/src/tokens.ts | 83 ++ packages/viem-account-ledger/src/types.ts | 1 + .../viem-account-ledger/src/utils.test.ts | 110 ++ packages/viem-account-ledger/src/utils.ts | 67 + packages/viem-account-ledger/tsconfig.json | 13 + packages/viem-account-ledger/typedoc.json | 13 + packages/viem-account-ledger/vitest.config.ts | 11 + yarn.lock | 1289 ++++++++++++++++- 21 files changed, 2114 insertions(+), 12 deletions(-) create mode 100644 .changeset/dry-gifts-love.md create mode 100644 packages/viem-account-ledger/.eslintrc.cjs create mode 100644 packages/viem-account-ledger/.gitignore create mode 100644 packages/viem-account-ledger/.npmignore create mode 100644 packages/viem-account-ledger/CHANGELOG.md create mode 100644 packages/viem-account-ledger/README.md create mode 100644 packages/viem-account-ledger/eslint.tsconfig.json create mode 100644 packages/viem-account-ledger/package.json create mode 100644 packages/viem-account-ledger/src/data.ts create mode 100644 packages/viem-account-ledger/src/index.ts create mode 100644 packages/viem-account-ledger/src/ledger-to-account.test.ts create mode 100644 packages/viem-account-ledger/src/ledger-to-account.ts create mode 100644 packages/viem-account-ledger/src/test-utils.ts create mode 100644 packages/viem-account-ledger/src/tokens.ts create mode 100644 packages/viem-account-ledger/src/types.ts create mode 100644 packages/viem-account-ledger/src/utils.test.ts create mode 100644 packages/viem-account-ledger/src/utils.ts create mode 100644 packages/viem-account-ledger/tsconfig.json create mode 100644 packages/viem-account-ledger/typedoc.json create mode 100644 packages/viem-account-ledger/vitest.config.ts diff --git a/.changeset/dry-gifts-love.md b/.changeset/dry-gifts-love.md new file mode 100644 index 000000000..05f30b04a --- /dev/null +++ b/.changeset/dry-gifts-love.md @@ -0,0 +1,5 @@ +--- +'@celo/viem-account-ledger': major +--- + +Initial release diff --git a/packages/viem-account-ledger/.eslintrc.cjs b/packages/viem-account-ledger/.eslintrc.cjs new file mode 100644 index 000000000..bfd2057be --- /dev/null +++ b/packages/viem-account-ledger/.eslintrc.cjs @@ -0,0 +1,3 @@ +module.exports = { + extends: '../../.eslintrc.js', +} diff --git a/packages/viem-account-ledger/.gitignore b/packages/viem-account-ledger/.gitignore new file mode 100644 index 000000000..7fabe89f6 --- /dev/null +++ b/packages/viem-account-ledger/.gitignore @@ -0,0 +1,4 @@ +lib/ +tmp/ +.tmp/ +.env \ No newline at end of file diff --git a/packages/viem-account-ledger/.npmignore b/packages/viem-account-ledger/.npmignore new file mode 100644 index 000000000..600437e22 --- /dev/null +++ b/packages/viem-account-ledger/.npmignore @@ -0,0 +1,16 @@ +/.devchain/ +/.devchain.tar.gz +/coverage/ +/node_modules/ +/src/ +/tmp/ +/.tmp/ + +/tsconfig.* +/jest.config.* +*.tgz + +/src + +/lib/**/*.test.* +/lib/test-utils \ No newline at end of file diff --git a/packages/viem-account-ledger/CHANGELOG.md b/packages/viem-account-ledger/CHANGELOG.md new file mode 100644 index 000000000..e69de29bb diff --git a/packages/viem-account-ledger/README.md b/packages/viem-account-ledger/README.md new file mode 100644 index 000000000..5df60f8ba --- /dev/null +++ b/packages/viem-account-ledger/README.md @@ -0,0 +1,55 @@ +# @celo/viem-account-ledger + +This library aims to ease the usage of a ledger device with (viem)[https://viem.sh/]. + +## Installation + +```bash +npm install @celo/viem-account-ledger viem@2 @ledgerhq/transport-node-hid@6.x +# or yarn or bun or ... +``` + +> [!IMPORTANT] > `viem` is a peer dependency and MUST be installed alongside this library. +> `@ledgerhq/transport-node-hid` is a peer dependency and MUST be installed alongside this library. + +## Usage + +```ts +import TransportNodeHid from '@ledgerhq/hw-transport-node-hid' +import { createWalletClient } from 'viem' +import { celo, celoAlfajores } from 'viem/chains' +import { ledgerToAccount } from '@celo/viem-account-ledger' + +async function main() => { + const account = await ledgerToAccount({ + transport: await TransportNodeHid.open(''), + }) + const client = createWalletClient({ + account, + chain: celo, + transport: http() + }); + await client.sendTransaction({ + to: '0x123...', + value: 10n, + feeCurrency: '0x123...' + }); +} +``` + +You can also use the `account` directly eg: + +```ts +const account = await ledgerToAccount({ + transport: await TransportNodeHid.open(''), +}) +account.signTransaction({ + to: '0x123...', + value: 123n, + chainId: celoAlfajores.id, + nonce: 42, + maxFeePerGas: 100n, + maxPriorityFeePerGas: 100n, + feeCurrency: '0x123...', +}) +``` diff --git a/packages/viem-account-ledger/eslint.tsconfig.json b/packages/viem-account-ledger/eslint.tsconfig.json new file mode 100644 index 000000000..a8d4317b4 --- /dev/null +++ b/packages/viem-account-ledger/eslint.tsconfig.json @@ -0,0 +1,4 @@ +{ + "extends": "./tsconfig.json", + "exclude": [] +} diff --git a/packages/viem-account-ledger/package.json b/packages/viem-account-ledger/package.json new file mode 100644 index 000000000..0dbe02670 --- /dev/null +++ b/packages/viem-account-ledger/package.json @@ -0,0 +1,54 @@ +{ + "name": "@celo/viem-account-ledger", + "version": "0.0.1", + "description": "Helper library to make ledger<->viem interactions easier", + "type": "module", + "exports": { + ".": "./lib/index.js" + }, + "types": "./lib/index.d.ts", + "author": "cLabs", + "license": "Apache-2.0", + "homepage": "https://docs.celo.org/developer/tools", + "repository": "https://github.com/celo-org/developer-tooling/tree/master/packages/viem-account-ledger", + "keywords": [ + "celo", + "blockchain", + "viem", + "ledger" + ], + "scripts": { + "build": "yarn run --top-level tsc -b .", + "clean": "yarn run --top-level tsc -b . --clean", + "docs": "yarn run --top-level typedoc", + "test": "yarn run vitest", + "lint": "yarn run --top-level eslint -c .eslintrc.cjs ", + "prepublishOnly": "yarn build" + }, + "peerDependencies": { + "@ledgerhq/hw-transport-node-hid": "^6.x", + "viem": "2.x" + }, + "dependencies": { + "@celo/base": "^6.1.0", + "@celo/ledger-token-signer": "^0.4.0", + "@ledgerhq/errors": "^6.16.4", + "@ledgerhq/hw-app-eth": "git+https://github.com:celo-org/ledgerjs-hw-app-eth.git", + "semver": "^7.6.0" + }, + "devDependencies": { + "@celo/typescript": "workspace:^", + "@celo/utils": "workspace:^", + "@celo/wallet-base": "workspace:^", + "@celo/wallet-remote": "workspace:^", + "@ethereumjs/util": "8.0.5", + "@ledgerhq/hw-transport-node-hid": "^6.29.5", + "@vitest/coverage-v8": "2.1.2", + "dotenv": "^8.2.0", + "viem": "^2.21.14", + "vitest": "^2.1.2" + }, + "engines": { + "node": ">=18" + } +} diff --git a/packages/viem-account-ledger/src/data.ts b/packages/viem-account-ledger/src/data.ts new file mode 100644 index 000000000..d348d9795 --- /dev/null +++ b/packages/viem-account-ledger/src/data.ts @@ -0,0 +1,19 @@ +// export default 'AAAAaARDRUxPRx7ON1DaI3+TuOM5xTaYm4l4pDgAAAASAACk7DBFAiEA5rECRg94+fCoIvoG9/5qWh62zl2C6Y+aFuuZrFe4CtcCIEJbRrkL3gqwT/Jj+7L3neazgpVCCTZZ3HX9JXXg5vleAAAAaARjVVNEdl3oFoRYYedaJfyhIrtomLixKCoAAAASAACk7DBFAiEApwQFHNBKXp+V2jq8BMD2y/5AwC9bhPQ2H4hT/vMl/B4CIFalOVtBFGREUKMU/F5vDlJLeQrTn6GQeDertpB2FpMvAAAAaARjRVVS2HY8uidqNzjm3oW0s79f3tbWynMAAAASAACk7DBFAiEAh2UeP1+SI2Ed5SiAjpJF6MkMrVa94gUwjJztyBlzhWMCIHfaOrEsxdxAGx+P+hxuSNO4zcw6KRLfJkkuic1V/CrHAAAAagZiIENFTE/dyb5X9VP+dXUtYWBrlMvX4CZO+AAAABIAAPNwMEUCIQCi62KsBfuNcfX0MriiRZ7a5DKERhtIz7sZ1SqBT7ruhgIgVrfmavyWzxzDW4AQeHn++A4qPjB1pQKoHvNXo8Hf1SMAAABpBmIgY1VTRGJJKmRKWI/ZBCcL7QatUrmr/qGuAAAAEgAA83AwRAIgGDYx4oB/gkYUqLeXqvEZXx9nOxVHzTe2ajyd2wnehxgCICQBe/rBPcXiaQJj3pdoXxroct/hV6r3G2G7y79EOEAPAAAAaQZiIGNFVVL57OMBJHrSziGJSUGDCiRw9Od0ygAAABIAAPNwMEQCIEdcFWP+HxEUoF1sCGVd34QGS0hL5cVUdrWdqVm3bYTgAiBCMA+Rg3Ubc3xla/35wzZesPlbeSMEPcr4uqL+8PeydwAAAGoGYSBDRUxP8ZSv31CwPmm9fQV8GqnhDJlU5MkAAAASAACu8zBFAiEAk/o0FBus2/QCrunFGEyoneQIRaMRC+y5L6Dvar8MU/kCIByJt2ziRhDG3AAbyXBIuJfZQujSHFcSJL3xF0xIlcPdAAAAaQZhIGNVU0SHQGn6HrFtRNYi8uDKJe6hcjabwQAAABIAAK7zMEQCIClrH2xgE3WMbD+hgQ7t5SiAcVG5WiUZ655voqCszKEoAiA/cO8UVgNY891MNJ5yeDk8w47WO0E1DQecrK71LR8g8gAAAGoGYSBjRVVSEMiSpuxDpT5F0LkWtLfTg7G3jA8AAAASAACu8zBFAiEAgpktbB1ZxyAwMJwKTSbZ30n8zgRuW0twbXoZxlsUAswCIHek4l4CIbjVMG2HVr0Ml9/8kA4F9dr69JBMaoSUkdKl' + +// This was signed by Marek Olszewski on Wed 18 June 2024 +export default 'AAAAZwRVU0RUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAACk7DBEAiA45AhZco0/POPgpuUPBqRnGG1SfGPpXE8+Hckw0dZLCQIgWteUoWhghs0KwxfgX2P0jJ2gYQEAbq6J+mWfSs9yWzcAAABnBFVTRFQOKj4FvJoW9SkqYXBFanEMuJxvcgAAABIAAKTsMEQCIAl/QSQA3JAF4c+otYCNG+JghDIV17habVFg/kLOLG9UAiAY+PSK6WBYObKt8OObZHKiAVWHOaI0E26OC61ytGCN4wAAAGgEVVNEQwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAApOwwRQIhAJAwutARDDU/EgrpV1SYRuLsKR/JjkYP4rRT6InIlo8GAiAgyuHrUNUuEdfijlmY8UWzR/jzLzycmkjEjL8qV06GvwAAAGcEVVNEQy8l3rOEjCB/yODDQDWzun/BV2ArAAAAEgAApOwwRAIgVYSG4e4JD7mbHMdOd29i5c4872THYeVWqDsb6ZE0JA4CIGVsHMurIGTBw1WUJqmOsBXUBlP5bhljUufw9jgQKq7JAAAAaARlWE9Gc/k9zEnLiiOeIDJmPpR13V7ymggAAAASAACk7DBFAiEA31wGJ9NfYN5Ujs3qkNxXowT73iNAxrBw7SdHTfLn47UCIH0fhGCTysFEdN31WIVCvkgoB2VKaF7Q6i8sZFOj++4XAAAAaARjVVNEdl3oFoRYYedaJfyhIrtomLixKCoAAAASAACk7DBFAiEApwQFHNBKXp+V2jq8BMD2y/5AwC9bhPQ2H4hT/vMl/B4CIFalOVtBFGREUKMU/F5vDlJLeQrTn6GQeDertpB2FpMvAAAAaARjRVVS2HY8uidqNzjm3oW0s79f3tbWynMAAAASAACk7DBFAiEAh2UeP1+SI2Ed5SiAjpJF6MkMrVa94gUwjJztyBlzhWMCIHfaOrEsxdxAGx+P+hxuSNO4zcw6KRLfJkkuic1V/CrHAAAAaAVjUkVBTOhTej0FbaRGZ3uenWxdtwTqq0eHAAAAEgAApOwwRAIgKq0LIfD4D+gU3xANTkNfCrpo8CBBZlpasrsjd/E3YuoCICU2CvRG4xPmFzmmDLIjvN2ARrjqtkwAjLeQ8jUxRbZIAAAAaQZiIGNVU0RiSSpkSliP2QQnC+0GrVK5q/6hrgAAABIAAPNwMEQCIBg2MeKAf4JGFKi3l6rxGV8fZzsVR803tmo8ndsJ3ocYAiAkAXv6wT3F4mkCY96XaF8a6HLf4Veq9xthu8u/RDhADwAAAGkGYiBlWE9GZMHYEmc+k7wDatw9VH2ZUGltpa8AAAASAADzcDBEAiAL0g/ZekAf2Zok/7GXeIcwKMibuiLprWKUDIxl8BcLRwIgJBOEVGXOISlfVmuqdUWrbR2xR9DNYafBO4wCxQN2mUEAAABqB2IgY1JFQUxqDu8r7Uww3Cy0L+bF8B+A9+8W0QAAABIAAPNwMEQCIAuSOFoyw6PPiuegcqMLtpvPU5ip23jlQKvjcggLxT0UAiAiVDv5VON1+peijMemQCD3Gvcz+BtCAgC60z76+mm2xQAAAGkGYiBjRVVS+ezjASR60s4hiUlBgwokcPTndMoAAAASAADzcDBEAiBHXBVj/h8RFKBdbAhlXd+EBktIS+XFVHa1nalZt22E4AIgQjAPkYN1G3N8ZWv9+cM2XrD5W3kjBD3K+Lqi/vD3sncAAABoBGEgRyQD09q4Q+bAOz0nHv+ReOapbCjSXwAAABIAAK7zMEUCIQCZTGG2AjD7sgxeavTx9xhfi8TEkEGv83Es3sl31NVjwwIgdUpDy6iaoiJbHxT/0/tiHs8FGYYdKRE1EPzMUIcm2+oAAABqBmEgY0VVUhDIkqbsQ6U+RdC5FrS304Oxt4wPAAAAEgAArvMwRQIhAIKZLWwdWccgMDCcCk0m2d9J/M4EbltLcG16GcZbFALMAiB3pOJeAiG41TBth1a9DJff/JAOBfXa+vSQTGqElJHSpQAAAGkFYSBFRkMa17YXy2xRVqbepuR1FNFkdrmfOAAAAAYAAK7zMEUCIQDIjpFbbedbDHebk1HaK2VoxHzTe8Tkn5VrB2KCne0i5QIgF8g1CYG9jclyquUUxC+vPprZPnCSSroJxMWhYIxgRtAAAABqBmEgVVNEQ0gi5Y3m9eSF75DfUcQc4BchMx3AAAAABgAArvMwRQIhANOSBnG6FiIl0EprRvWagcC7r8EJyzkC0XKum71zUQXAAiASh91Kt5m0jm7BVXRZou1xV+8DwCs4Nn3oT+Ogb1NRdAAAAGgFYSBFRkN9AneQmY9xSylMlv2p4nr1htHrtQAAAAYAAK7zMEQCICnuUijiwCApPFmsqpFcI3KdDgI4ueArA6Xgc9pd31ROAiBMr8ljj6A7N3vgklG8sSNAvbCB+WujFTtZFWYGwYHFrwAAAGkGYSBjVVNEh0Bp+h6xbUTWIvLgyiXuoXI2m8EAAAASAACu8zBEAiApax9sYBN1jGw/oYEO7eUogHFRuVolGeueb6KgrMyhKAIgP3DvFFYDWPPdTDSecng5PMOO1jtBNQ0HnKyu9S0fIPIAAABpBmEgZVhPRrD6FeACUW0DAYhAWcCqwPDHKwGdAAAAEgAArvMwRAIgIBy2pPKNIi1HG3FrxikDxfZL0NZQcKhUKMFiaiu0cxsCIDyeMa3QZM71diszR3uNso9U+mmB9AxMzVL6RLHmjRlbAAAAagZhIFVTRFTE+G6bSliNUBwcPiVijf1QvI1hXgAAABIAAK7zMEUCIQDX0yUA7NuyMcn52Q3o4f5aouT7hqLRDK05zaSapCT3qAIgDW3F0IpF386QYNiGqThC4a5OsgII7Kfz/qW6EYq1+VQAAABrB2EgY1JFQUzk1Rd4XQkdPFSBiDLbYJS8wnRFRQAAABIAAK7zMEUCIQDVjhKnLdzKU84vV/13nvvshLsaCC4IfzLFmieUNniSMAIgMCRja6R+GcT2OFVF8ClIx/7ZBlIHEIqooo/8Bnpy1sc=' + +// How did we get this? By following these steps: +// 1 - get pubkey from https://github.com/blooo-io/app-celo-spender/pull/7/files#diff-e0cf5b28d9b6b600f0af2bc78e8fd30ec675fd731a5da86f0c4283ffc0e40176L75-L83 +// 2 - now you've got to trust me +// 3 - run `ASN1_PREFIX=3056301006072a8648ce3d020106052b8104000a034200` +// 4 - remove spaces, colons, 0xs from the pubkey of step 1, I've done that for you :) +// 5 - and store it in key `KEY=04b06cf5d8f7ed71d8bd9b9dc37944a1c6d240f69bb0be3621dddbb6ac0eccd1508bcc2ea46227e43b941e2c6f1b1cd0ae68e54b185e2cabef3455580604bd45b8` +// 5 - finally run `echo $ASN1_PREFIX$KEY | xxd -r -p - | openssl ec -inform der -pubin -pubout` +// 6 - enjoy +export const legacyLedgerPublicKeyHex = [ + `-----BEGIN PUBLIC KEY-----`, + `MFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEsGz12Pftcdi9m53DeUShxtJA9puwvjYh`, + `3du2rA7M0VCLzC6kYifkO5QeLG8bHNCuaOVLGF4sq+80VVgGBL1FuA==`, + `-----END PUBLIC KEY-----`, +].join('\n') diff --git a/packages/viem-account-ledger/src/index.ts b/packages/viem-account-ledger/src/index.ts new file mode 100644 index 000000000..58daeaf32 --- /dev/null +++ b/packages/viem-account-ledger/src/index.ts @@ -0,0 +1,5 @@ +export { + CELO_BASE_DERIVATION_PATH, + DEFAULT_DERIVATION_PATH, + ledgerToAccount, +} from './ledger-to-account.js' diff --git a/packages/viem-account-ledger/src/ledger-to-account.test.ts b/packages/viem-account-ledger/src/ledger-to-account.test.ts new file mode 100644 index 000000000..1dce8f0fa --- /dev/null +++ b/packages/viem-account-ledger/src/ledger-to-account.test.ts @@ -0,0 +1,100 @@ +import TransportNodeHid from '@ledgerhq/hw-transport-node-hid' +import { describe, expect, it, test, vi } from 'vitest' +import { ledgerToAccount } from './ledger-to-account.js' +import { mockLedger, TEST_CHAIN_ID } from './test-utils.js' + +vi.mock('./utils.js', async () => { + const module = await vi.importActual('./utils.js') + + return { + ...module, + generateLedger: vi.fn(() => Promise.resolve(mockLedger())), + } +}) + +const transport = + process.env.USE_PHYSICAL_LEDGER === 'true' + ? TransportNodeHid.open('') + : Promise.resolve(undefined as unknown as TransportNodeHid) + +describe('ledgerToAccount', () => { + it('can be setup', async () => { + await expect( + ledgerToAccount({ + transport: await transport, + }) + ).resolves.not.toBe(undefined) + // expect((generateLedger as ReturnType<(typeof jest)['fn']>).mock.calls.length).toBe(1) + }) + + describe('signs txs', () => { + const txData = { + to: '0x1234567890123456789012345678901234567890', + value: BigInt(123), + chainId: TEST_CHAIN_ID, + nonce: 42, + maxFeePerGas: BigInt(100), + maxPriorityFeePerGas: BigInt(100), + } as const + + test('eip1559', async () => { + const account = await ledgerToAccount({ + transport: await transport, + }) + await expect(account.signTransaction(txData)).resolves.toMatchInlineSnapshot( + `"0x02f86282aef32a6464809412345678901234567890123456789012345678907b80c080a05e130d8edb38e3ee8ab283af7c03a2579598b9a77807d7d796060358787d4707a07219dd22fe3bf3fe57682041d8f80dc9909cd70d903163b077d19625c4cd6e67"` + ) + }) + + test('cip64', async () => { + const account = await ledgerToAccount({ + transport: await transport, + }) + const cUSDa = '0x874069fa1eb16d44d622f2e0ca25eea172369bc1' + await expect( + account.signTransaction({ + ...txData, + + feeCurrency: cUSDa, + }) + ).resolves.toMatchInlineSnapshot( + `"0x7bf87782aef32a6464809412345678901234567890123456789012345678907b80c094874069fa1eb16d44d622f2e0ca25eea172369bc180a017d8df83b40dc645b60142280613467ca92438ff5aa0811a6ceff399fe66d661a02efe4eea14146f41d4f776bec1ededc486ddee37cea8304d297a69dbf27c4089"` + ) + }) + }) + + it('signs messages', async () => { + const account = await ledgerToAccount({ + transport: await transport, + }) + await expect(account.signMessage({ message: 'Hello World' })).resolves.toMatchInlineSnapshot( + `"0x2f9a547e69592e98114263c08c6f7a6e6cd2f991fc29f442947179419233fe9641c8e4c86975a2722b54313e47768d2ffe2608c497ff9fe7f8c61b12e6257e571c"` + ) + }) + + it('signs typed data', async () => { + const account = await ledgerToAccount({ + transport: await transport, + }) + + await expect( + account.signTypedData({ + domain: { + name: 'foo', + version: '0.0.0', + chainId: BigInt(42), + verifyingContract: '0x123', + }, + primaryType: 'EIP712Domain', + types: { + EIP712Domain: [ + { name: 'name', type: 'string' }, + { name: 'version', type: 'string' }, + { name: 'chainId', type: 'uint256' }, + { name: 'verifyingContract', type: 'address' }, + ], + }, + }) + ).rejects.toMatchInlineSnapshot(`[Error: Not implemented as of this release.]`) + }, 20_000) +}) diff --git a/packages/viem-account-ledger/src/ledger-to-account.ts b/packages/viem-account-ledger/src/ledger-to-account.ts new file mode 100644 index 000000000..3c8e1df05 --- /dev/null +++ b/packages/viem-account-ledger/src/ledger-to-account.ts @@ -0,0 +1,68 @@ +import { CELO_DERIVATION_PATH_BASE, trimLeading0x } from '@celo/base' +import { ensureLeading0x } from '@celo/base/lib/address.js' +import TransportNodeHid from '@ledgerhq/hw-transport-node-hid' +import { hashMessage, serializeSignature } from 'viem' +import { LocalAccount, toAccount } from 'viem/accounts' +import { CeloTransactionSerializable, serializeTransaction } from 'viem/celo' + +import { checkForKnownToken, generateLedger } from './utils.js' + +type LedgerAccount = LocalAccount<'ledger'> + +export const ETH_DERIVATION_PATH_BASE = "m/44'/60'/0'" as const +export const CELO_BASE_DERIVATION_PATH = `${CELO_DERIVATION_PATH_BASE.slice(2)}/0` +export const DEFAULT_DERIVATION_PATH = `${ETH_DERIVATION_PATH_BASE.slice(2)}/0` + +export async function ledgerToAccount({ + transport, + derivationPathIndex = 0, + baseDerivationPath = DEFAULT_DERIVATION_PATH, +}: { + transport: TransportNodeHid.default + derivationPathIndex?: number | string + baseDerivationPath?: string +}): Promise { + const derivationPath = `${baseDerivationPath}/${derivationPathIndex}` + const ledger = await generateLedger(transport) + const { address, publicKey } = await ledger.getAddress(derivationPath, true) + + const account = toAccount({ + address: ensureLeading0x(address), + + async signTransaction(transaction: CeloTransactionSerializable) { + await checkForKnownToken(ledger, { + to: transaction.to!, + chainId: transaction.chainId!, + feeCurrency: transaction.feeCurrency, + }) + + const hash = serializeTransaction(transaction) + const { r, s, v } = await ledger!.signTransaction(derivationPath, trimLeading0x(hash), null) + return serializeTransaction(transaction, { + r: ensureLeading0x(r), + s: ensureLeading0x(s), + v: BigInt(ensureLeading0x(v)), + }) + }, + + async signMessage({ message }) { + const hash = hashMessage(message) + const { r, s, v } = await ledger!.signPersonalMessage(derivationPath, trimLeading0x(hash)) + return serializeSignature({ + r: ensureLeading0x(r), + s: ensureLeading0x(s), + v: BigInt(v), + }) + }, + + async signTypedData(_parameters) { + throw new Error('Not implemented as of this release.') + }, + }) + + return { + ...account, + publicKey: ensureLeading0x(publicKey), + source: 'ledger', + } +} diff --git a/packages/viem-account-ledger/src/test-utils.ts b/packages/viem-account-ledger/src/test-utils.ts new file mode 100644 index 000000000..99eb58395 --- /dev/null +++ b/packages/viem-account-ledger/src/test-utils.ts @@ -0,0 +1,206 @@ +import { ensureLeading0x, normalizeAddressWith0x, trimLeading0x } from '@celo/base' +import { generateTypedDataHash } from '@celo/utils/lib/sign-typed-data-utils.js' +import { getHashFromEncoded, signTransaction } from '@celo/wallet-base' +import * as ethUtil from '@ethereumjs/util' +import Eth from '@ledgerhq/hw-app-eth' +import { createVerify, VerifyPublicKeyInput } from 'node:crypto' +import { readFileSync } from 'node:fs' +import { dirname, join } from 'node:path' +import { Hex } from 'viem' +import { privateKeyToAccount, privateKeyToAddress } from 'viem/accounts' +import { legacyLedgerPublicKeyHex } from './data.js' +import { DEFAULT_DERIVATION_PATH } from './ledger-to-account.js' +import { meetsVersionRequirements, MIN_VERSION_EIP1559 } from './utils.js' + +const PRIVATE_KEY1 = '0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef' +export const ACCOUNT_ADDRESS1 = normalizeAddressWith0x(privateKeyToAddress(PRIVATE_KEY1)) +const PRIVATE_KEY2 = '0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890fdeccc' +export const ACCOUNT_ADDRESS2 = normalizeAddressWith0x(privateKeyToAddress(PRIVATE_KEY2)) +const PRIVATE_KEY3 = '0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890fffff1' +export const ACCOUNT_ADDRESS3 = normalizeAddressWith0x(privateKeyToAddress(PRIVATE_KEY3)) +const PRIVATE_KEY4 = '0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890fffff2' +export const ACCOUNT_ADDRESS4 = normalizeAddressWith0x(privateKeyToAddress(PRIVATE_KEY4)) +const PRIVATE_KEY5 = '0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890fffff3' +export const ACCOUNT_ADDRESS5 = normalizeAddressWith0x(privateKeyToAddress(PRIVATE_KEY5)) +const PRIVATE_KEY_NEVER = '0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890ffffff' +export const ACCOUNT_ADDRESS_NEVER = normalizeAddressWith0x(privateKeyToAddress(PRIVATE_KEY_NEVER)) + +const ledgerAddresses: { [myKey: string]: { address: Hex; privateKey: Hex } } = { + [`${DEFAULT_DERIVATION_PATH}/0`]: { + address: ACCOUNT_ADDRESS1, + privateKey: PRIVATE_KEY1, + }, + [`${DEFAULT_DERIVATION_PATH}/1`]: { + address: ACCOUNT_ADDRESS2, + privateKey: PRIVATE_KEY2, + }, + [`${DEFAULT_DERIVATION_PATH}/2`]: { + address: ACCOUNT_ADDRESS3, + privateKey: PRIVATE_KEY3, + }, + [`${DEFAULT_DERIVATION_PATH}/3`]: { + address: ACCOUNT_ADDRESS4, + privateKey: PRIVATE_KEY4, + }, + [`${DEFAULT_DERIVATION_PATH}/4`]: { + address: ACCOUNT_ADDRESS5, + privateKey: PRIVATE_KEY5, + }, +} + +export const TEST_CHAIN_ID = 44787 + +// Sample data from the official EIP-712 example: +// https://github.com/ethereum/EIPs/blob/master/assets/eip-712/Example.js +const TYPED_DATA = { + types: { + EIP712Domain: [ + { name: 'name', type: 'string' }, + { name: 'version', type: 'string' }, + { name: 'chainId', type: 'uint256' }, + { name: 'verifyingContract', type: 'address' }, + ], + Person: [ + { name: 'name', type: 'string' }, + { name: 'wallet', type: 'address' }, + ], + Mail: [ + { name: 'from', type: 'Person' }, + { name: 'to', type: 'Person' }, + { name: 'contents', type: 'string' }, + ], + }, + primaryType: 'Mail', + domain: { + name: 'Ether Mail', + version: '1', + chainId: 1, + verifyingContract: '0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC', + }, + message: { + from: { + name: 'Cow', + wallet: '0xCD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826', + }, + to: { + name: 'Bob', + wallet: '0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB', + }, + contents: 'Hello, Bob!', + }, +} + +interface Config extends Partial>> {} + +export const mockLedger = (config?: Config) => { + const _ledger = { + getAddress: async (derivationPath: string) => { + if (ledgerAddresses[derivationPath]) { + const { address, privateKey } = ledgerAddresses[derivationPath] + return { + address, + derivationPath, + publicKey: privateKeyToAccount(privateKey).publicKey, + } + } + return { + address: '', + derivationPath, + publicKey: '', + } + }, + signTransaction: async (derivationPath: string, data: string) => { + if (ledgerAddresses[derivationPath]) { + const hash = getHashFromEncoded(ensureLeading0x(data)) + const { r, s, v } = signTransaction(hash, ledgerAddresses[derivationPath].privateKey) + + return { + v: v.toString(16), + r: r.toString('hex'), + s: s.toString('hex'), + } + } + throw new Error('Invalid Path') + }, + signPersonalMessage: async (derivationPath: string, data: string) => { + if (ledgerAddresses[derivationPath]) { + const dataBuff = ethUtil.toBuffer(ensureLeading0x(data)) + const msgHashBuff = ethUtil.hashPersonalMessage(dataBuff) + + const trimmedKey = trimLeading0x(ledgerAddresses[derivationPath].privateKey) + const pkBuffer = Buffer.from(trimmedKey, 'hex') + const signature = ethUtil.ecsign(msgHashBuff, pkBuffer) + return { + v: Number(signature.v), + r: signature.r.toString('hex'), + s: signature.s.toString('hex'), + } + } + throw new Error('Invalid Path') + }, + signEIP712HashedMessage: async ( + derivationPath: string, + _domainSeparator: string, + _structHash: string + ) => { + const messageHash = generateTypedDataHash(TYPED_DATA) + + const trimmedKey = trimLeading0x(ledgerAddresses[derivationPath].privateKey) + const pkBuffer = Buffer.from(trimmedKey, 'hex') + const signature = ethUtil.ecsign(messageHash, pkBuffer) + return { + v: Number(signature.v), + r: signature.r.toString('hex'), + s: signature.s.toString('hex'), + } + }, + getAppConfiguration: async () => { + return { + arbitraryDataEnabled: config?.arbitraryDataEnabled ?? 1, + version: config?.version ?? MIN_VERSION_EIP1559, + erc20ProvisioningNecessary: config?.erc20ProvisioningNecessary ?? 1, + starkEnabled: config?.starkEnabled ?? 1, + starkv2Supported: config?.starkv2Supported ?? 1, + } + }, + provideERC20TokenInformation: async (tokenData: string) => { + let pubkey: VerifyPublicKeyInput + const version = (await _ledger.getAppConfiguration()).version + if ( + meetsVersionRequirements(version, { + minimum: MIN_VERSION_EIP1559, + }) + ) { + // verify with new pubkey + const pubDir = dirname(require.resolve('@celo/ledger-token-signer')) + pubkey = { key: readFileSync(join(pubDir, 'pubkey.pem')).toString() } + } else { + // verify with oldpubkey + pubkey = { key: legacyLedgerPublicKeyHex } + } + + const verify = createVerify('sha256') + const tokenDataBuf = Buffer.from(trimLeading0x(tokenData), 'hex') + const BASE_DATA_LENGTH = + 20 + // contract address, 20 bytes + 4 + // decimals, uint32, 4 bytes + 4 // chainId, uint32, 4 bytes + // first byte of data is the ticker length, so we add that to base data length + const dataLen = BASE_DATA_LENGTH + tokenDataBuf.readUint8(0) + + // start at 1 since the first byte was just informative + const data = tokenDataBuf.slice(1, dataLen + 1) + verify.update(data) + verify.end() + // read from end of data til the end + const signature = tokenDataBuf.slice(dataLen + 1) + const verified = verify.verify(pubkey, signature) + + if (!verified) { + throw new Error('couldnt verify data sent to MockLedger') + } + return verified + }, + } as unknown as Eth.default + return _ledger +} diff --git a/packages/viem-account-ledger/src/tokens.ts b/packages/viem-account-ledger/src/tokens.ts new file mode 100644 index 000000000..01dbf55cb --- /dev/null +++ b/packages/viem-account-ledger/src/tokens.ts @@ -0,0 +1,83 @@ +// Copied from '@ledgerhq/hw-app-eth/erc20' because we need to change the path of the blob and support for address+chainId +import { Address, normalizeAddressWith0x } from '@celo/base/lib/address.js' +import { default as blob } from '@celo/ledger-token-signer' +import blobLegacy from './data.js' + +/** + * Retrieve the token information by a given contract address and chainId if any + */ +export const tokenInfoByAddressAndChainId = ( + contract: Address, + chainId: number +): TokenInfo | null | undefined => + get(blob as unknown as string).byContractKey(generateContractKey(contract, chainId)) + +export const legacyTokenInfoByAddressAndChainId = ( + contract: Address, + chainId: number +): TokenInfo | null | undefined => + get(blobLegacy).byContractKey(generateContractKey(contract, chainId)) + +/** + * list all the ERC20 tokens informations + */ +export const list = (): TokenInfo[] => get(blob.default).list() +export const listLegacy = (): TokenInfo[] => get(blobLegacy).list() + +export interface TokenInfo { + contractAddress: Address + ticker: string + decimals: number + chainId: number + signature: Buffer + data: Buffer +} + +export interface API { + byContractKey: (arg0: string) => TokenInfo | null | undefined + list: () => TokenInfo[] +} + +function generateContractKey(contract: Address, chainId: number): string { + return [normalizeAddressWith0x(contract), chainId].join('-') +} + +const get = (data: string): API => { + const buf = Buffer.from(data, 'base64') + const byContract: { [id: string]: TokenInfo } = {} + const entries: TokenInfo[] = [] + let i = 0 + while (i < buf.length) { + const length = buf.readUInt32BE(i) + i += 4 + const item = buf.slice(i, i + length) + let j = 0 + const tickerLength = item.readUInt8(j) + j += 1 + const ticker = item.slice(j, j + tickerLength).toString('ascii') + j += tickerLength + const contractAddress: string = normalizeAddressWith0x(item.slice(j, j + 20).toString('hex')) + j += 20 + const decimals = item.readUInt32BE(j) + j += 4 + const chainId = item.readUInt32BE(j) + j += 4 + const signature = item.slice(j) + const entry: TokenInfo = { + ticker, + contractAddress, + decimals, + chainId, + signature, + data: item, + } + entries.push(entry) + byContract[generateContractKey(contractAddress, chainId)] = entry + i += length + } + const api = { + list: () => entries, + byContractKey: (id: string) => byContract[id], + } + return api +} diff --git a/packages/viem-account-ledger/src/types.ts b/packages/viem-account-ledger/src/types.ts new file mode 100644 index 000000000..0a1099279 --- /dev/null +++ b/packages/viem-account-ledger/src/types.ts @@ -0,0 +1 @@ +export type Hex = `0x${string}` diff --git a/packages/viem-account-ledger/src/utils.test.ts b/packages/viem-account-ledger/src/utils.test.ts new file mode 100644 index 000000000..b630919e3 --- /dev/null +++ b/packages/viem-account-ledger/src/utils.test.ts @@ -0,0 +1,110 @@ +import { describe, expect, it, test, vi } from 'vitest' +import { ACCOUNT_ADDRESS1, mockLedger, TEST_CHAIN_ID } from './test-utils' +import { + assertCompat, + checkForKnownToken, + meetsVersionRequirements, + transportErrorFriendlyMessage, +} from './utils.js' + +describe('utils', () => { + describe('transportErrorFriendlyMessage', () => { + test('26368', () => { + const error = new Error('Test error') + // @ts-expect-error + error.statusCode = 26368 + expect(() => transportErrorFriendlyMessage(error)).toThrowErrorMatchingInlineSnapshot( + `[Error: Possible connection lost with the ledger. Check if still on and connected. Test error]` + ) + }) + test('26628', () => { + const error = new Error('Test error') + // @ts-expect-error + error.statusCode = 26628 + expect(() => transportErrorFriendlyMessage(error)).toThrowErrorMatchingInlineSnapshot( + `[Error: Possible connection lost with the ledger. Check if still on and connected. Test error]` + ) + }) + test('NoDevice', () => { + const error = new Error('NoDevice') + expect(() => transportErrorFriendlyMessage(error)).toThrowErrorMatchingInlineSnapshot( + `[Error: Possible connection lost with the ledger. Check if still on and connected. NoDevice]` + ) + }) + test('other', () => { + const error = new Error('Test error') + expect(() => transportErrorFriendlyMessage(error)).toThrowErrorMatchingInlineSnapshot( + `[Error: Test error]` + ) + }) + }) + + describe('meetsVersionRequirements', () => { + it('checks if the version is within bounds', () => { + expect(meetsVersionRequirements('1.1.1', { minimum: '1.0.0', maximum: '2.0.0' })).toBe(true) + expect(meetsVersionRequirements('1.1.1', { minimum: '1.1.1', maximum: '2.0.0' })).toBe(true) + expect(meetsVersionRequirements('1.1.1', { minimum: '1.0.0', maximum: '1.1.1' })).toBe(true) + expect(meetsVersionRequirements('1.1.1', { minimum: '1.0.0' })).toBe(true) + expect(meetsVersionRequirements('0.0.1', { maximum: '2.0.0' })).toBe(true) + expect(meetsVersionRequirements('1.1.1', { minimum: '2.0.0', maximum: '3.0.0' })).toBe(false) + }) + }) + + describe('assertCompat', () => { + it("throws if it doesn't meet the requirements", async () => { + await expect(assertCompat(mockLedger({ version: '1.0.0' }))).rejects.toMatchInlineSnapshot( + `[Error: Due to technical issues, we require the users to update their ledger celo-app to >= 1.2.0. You can do this on ledger-live by updating the celo-app in the app catalog.]` + ) + }) + it('warns if it doesnt enable `arbitraryDataEnabled`', async () => { + const warn = vi.spyOn(console, 'warn').mockImplementation(() => undefined) + await expect(assertCompat(mockLedger({ arbitraryDataEnabled: 0 }))).resolves.toBeTruthy() + expect(warn.mock.lastCall).toMatchInlineSnapshot(` + [ + "Beware, your ledger does not allow the use of contract data. Some features may not work correctly, including token transfers. You can enable it from the ledger app settings.", + ] + `) + }) + it('works', async () => { + await expect(assertCompat(mockLedger())).resolves.toBeTruthy() + }) + }) + + describe('checkForKnownToken', () => { + const ledger = mockLedger() + + it('works', async () => { + const spy = vi.spyOn(ledger, 'provideERC20TokenInformation') + const cUSDa = '0x874069fa1eb16d44d622f2e0ca25eea172369bc1' + const cEURa = '0x10c892a6ec43a53e45d0b916b4b7d383b1b78c0f' + + await expect( + checkForKnownToken(ledger, { + to: ACCOUNT_ADDRESS1, + chainId: TEST_CHAIN_ID, + feeCurrency: cUSDa, + }) + ).resolves.toBeUndefined() + expect(spy.mock.calls.length).toBe(1) + spy.mockClear() + + await expect( + checkForKnownToken(ledger, { + to: cEURa, + chainId: TEST_CHAIN_ID, + }) + ).resolves.toBeUndefined() + expect(spy.mock.calls.length).toBe(1) + spy.mockClear() + + await expect( + checkForKnownToken(ledger, { + to: cUSDa, + chainId: TEST_CHAIN_ID, + feeCurrency: cEURa, + }) + ).resolves.toBeUndefined() + expect(spy.mock.calls.length).toBe(2) + }) + }) +}) diff --git a/packages/viem-account-ledger/src/utils.ts b/packages/viem-account-ledger/src/utils.ts new file mode 100644 index 000000000..17757e0ae --- /dev/null +++ b/packages/viem-account-ledger/src/utils.ts @@ -0,0 +1,67 @@ +import Eth from '@ledgerhq/hw-app-eth' +import TransportNodeHid from '@ledgerhq/hw-transport-node-hid' +import { SemVer } from 'semver' +import { tokenInfoByAddressAndChainId } from './tokens.js' +import { Hex } from './types.js' + +export const MIN_VERSION_EIP1559 = '1.2.0' + +export function transportErrorFriendlyMessage(error: any) { + if (error.statusCode === 26368 || error.statusCode === 26628 || error.message === 'NoDevice') { + throw new Error( + `Possible connection lost with the ledger. Check if still on and connected. ${error.message}` + ) + } + throw error +} + +export function meetsVersionRequirements( + version: string | SemVer, + { minimum, maximum }: { minimum?: SemVer | string; maximum?: SemVer | string } +) { + const min = minimum ? new SemVer(version).compare(minimum) >= 0 : true + const max = maximum ? new SemVer(version).compare(maximum) <= 0 : true + return min && max +} + +export async function assertCompat(ledger: Eth.default): Promise<{ + arbitraryDataEnabled: number + version: string +}> { + // TODO: check version only for CELO and not ETH if we wanna be eth compatible + const appConfiguration = await ledger.getAppConfiguration() + if (!meetsVersionRequirements(appConfiguration.version, { minimum: MIN_VERSION_EIP1559 })) { + throw new Error( + `Due to technical issues, we require the users to update their ledger celo-app to >= ${MIN_VERSION_EIP1559}. You can do this on ledger-live by updating the celo-app in the app catalog.` + ) + } + if (!appConfiguration.arbitraryDataEnabled) { + console.warn( + 'Beware, your ledger does not allow the use of contract data. Some features may not work correctly, including token transfers. You can enable it from the ledger app settings.' + ) + } + return appConfiguration +} + +export async function checkForKnownToken( + ledger: Eth.default, + { to, chainId, feeCurrency }: { to: string; chainId: number; feeCurrency?: Hex } +) { + const tokenInfo = tokenInfoByAddressAndChainId(to, chainId) + if (tokenInfo) { + await ledger.provideERC20TokenInformation(`0x${tokenInfo.data.toString('hex')}`) + } + + if (!feeCurrency || feeCurrency === '0x') return + + const feeTokenInfo = tokenInfoByAddressAndChainId(feeCurrency, chainId) + if (feeTokenInfo) { + await ledger.provideERC20TokenInformation(`0x${feeTokenInfo.data.toString('hex')}`) + } +} + +export async function generateLedger(transport: TransportNodeHid.default) { + const ledger = new Eth.default(transport) + await assertCompat(ledger) + return ledger +} diff --git a/packages/viem-account-ledger/tsconfig.json b/packages/viem-account-ledger/tsconfig.json new file mode 100644 index 000000000..bb170fe17 --- /dev/null +++ b/packages/viem-account-ledger/tsconfig.json @@ -0,0 +1,13 @@ +{ + "extends": "@celo/typescript/tsconfig.library.json", + "compilerOptions": { + "rootDir": "src", + "outDir": "lib", + "moduleResolution": "Node16", + "module": "Node16", + "declaration": true, + "types": ["vitest/globals"] + }, + "include": ["src/**/*", "types/**/*"], + "exclude": ["**/*.test.ts"] +} diff --git a/packages/viem-account-ledger/typedoc.json b/packages/viem-account-ledger/typedoc.json new file mode 100644 index 000000000..27e4b830b --- /dev/null +++ b/packages/viem-account-ledger/typedoc.json @@ -0,0 +1,13 @@ +{ + "exclude": ["**/generated/*.ts", "**/*+(index|.test).ts"], + "excludePrivate": true, + "excludeProtected": true, + "hideGenerator": true, + "out": "../docs/viem-account-ledger", + "gitRevision": "master", + "readme": "none", + "entryPoints": ["./src"], + "githubPages": false, + "plugin": ["typedoc-plugin-markdown"], + "entryPointStrategy": "expand" +} diff --git a/packages/viem-account-ledger/vitest.config.ts b/packages/viem-account-ledger/vitest.config.ts new file mode 100644 index 000000000..5b8d2de3f --- /dev/null +++ b/packages/viem-account-ledger/vitest.config.ts @@ -0,0 +1,11 @@ +// vitest.config.ts +import { coverageConfigDefaults, defineConfig } from 'vitest/config' + +export default defineConfig({ + test: { + coverage: { + reporter: ['json', 'clover', 'lcov'], + exclude: ['**/data**', '**/tokens**', ...coverageConfigDefaults.exclude], + }, + }, +}) diff --git a/yarn.lock b/yarn.lock index 651bc7e4d..adf2cf933 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12,6 +12,13 @@ __metadata: languageName: node linkType: hard +"@adraffy/ens-normalize@npm:1.10.0": + version: 1.10.0 + resolution: "@adraffy/ens-normalize@npm:1.10.0" + checksum: 5cdb5d2a9c9f8c0a71a7bb830967da0069cae1f1235cd41ae11147e4000f368f6958386e622cd4d52bf45c1ed3f8275056b387cba28902b83354e40ff323ecde + languageName: node + linkType: hard + "@adraffy/ens-normalize@npm:1.9.0": version: 1.9.0 resolution: "@adraffy/ens-normalize@npm:1.9.0" @@ -29,6 +36,16 @@ __metadata: languageName: node linkType: hard +"@ampproject/remapping@npm:^2.3.0": + version: 2.3.0 + resolution: "@ampproject/remapping@npm:2.3.0" + dependencies: + "@jridgewell/gen-mapping": "npm:^0.3.5" + "@jridgewell/trace-mapping": "npm:^0.3.24" + checksum: f3451525379c68a73eb0a1e65247fbf28c0cccd126d93af21c75fceff77773d43c0d4a2d51978fb131aff25b5f2cb41a9fe48cc296e61ae65e679c4f6918b0ab + languageName: node + linkType: hard + "@aws-crypto/crc32@npm:5.2.0": version: 5.2.0 resolution: "@aws-crypto/crc32@npm:5.2.0" @@ -1238,6 +1255,13 @@ __metadata: languageName: node linkType: hard +"@babel/helper-string-parser@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/helper-string-parser@npm:7.25.7" + checksum: 2b8de9fa86c3f3090a349f1ce6e8ee2618a95355cbdafc6f228d82fa4808c84bf3d1d25290c6616d0a18b26b6cfeb6ec2aeebf01404bc8c60051d0094209f0e6 + languageName: node + linkType: hard + "@babel/helper-validator-identifier@npm:^7.18.6, @babel/helper-validator-identifier@npm:^7.19.1": version: 7.19.1 resolution: "@babel/helper-validator-identifier@npm:7.19.1" @@ -1252,6 +1276,13 @@ __metadata: languageName: node linkType: hard +"@babel/helper-validator-identifier@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/helper-validator-identifier@npm:7.25.7" + checksum: ec6934cc47fc35baaeb968414a372b064f14f7b130cf6489a014c9486b0fd2549b3c6c682cc1fc35080075e8e38d96aeb40342d63d09fc1a62510c8ce25cde1e + languageName: node + linkType: hard + "@babel/helper-validator-option@npm:^7.21.0": version: 7.21.0 resolution: "@babel/helper-validator-option@npm:7.21.0" @@ -1310,6 +1341,17 @@ __metadata: languageName: node linkType: hard +"@babel/parser@npm:^7.25.4": + version: 7.25.7 + resolution: "@babel/parser@npm:7.25.7" + dependencies: + "@babel/types": "npm:^7.25.7" + bin: + parser: ./bin/babel-parser.js + checksum: 98eaa81bd378734a5f2790f02c7c076ecaba0839217445b4b84f45a7b391d640c34034253231a5bb2b2daf8204796f03584c3f94c10d46b004369bbb426a418f + languageName: node + linkType: hard + "@babel/plugin-syntax-async-generators@npm:^7.8.4": version: 7.8.4 resolution: "@babel/plugin-syntax-async-generators@npm:7.8.4" @@ -1564,6 +1606,17 @@ __metadata: languageName: node linkType: hard +"@babel/types@npm:^7.25.4, @babel/types@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/types@npm:7.25.7" + dependencies: + "@babel/helper-string-parser": "npm:^7.25.7" + "@babel/helper-validator-identifier": "npm:^7.25.7" + to-fast-properties: "npm:^2.0.0" + checksum: 4504e16a95b6a67d50cfaa389bcbc0621019084cff73784ad4797f82d1bb76c870cb0abb6d9881d5776eb06b4607419a2b1205a08c3e87b152d74bd0884b822a + languageName: node + linkType: hard + "@bcoe/v8-coverage@npm:^0.2.3": version: 0.2.3 resolution: "@bcoe/v8-coverage@npm:0.2.3" @@ -2053,7 +2106,7 @@ __metadata: languageName: node linkType: hard -"@celo/utils@npm:^7.0.0, @celo/utils@workspace:packages/sdk/utils": +"@celo/utils@npm:^7.0.0, @celo/utils@workspace:^, @celo/utils@workspace:packages/sdk/utils": version: 0.0.0-use.local resolution: "@celo/utils@workspace:packages/sdk/utils" dependencies: @@ -2074,6 +2127,31 @@ __metadata: languageName: unknown linkType: soft +"@celo/viem-account-ledger@workspace:packages/viem-account-ledger": + version: 0.0.0-use.local + resolution: "@celo/viem-account-ledger@workspace:packages/viem-account-ledger" + dependencies: + "@celo/base": "npm:^6.1.0" + "@celo/ledger-token-signer": "npm:^0.4.0" + "@celo/typescript": "workspace:^" + "@celo/utils": "workspace:^" + "@celo/wallet-base": "workspace:^" + "@celo/wallet-remote": "workspace:^" + "@ethereumjs/util": "npm:8.0.5" + "@ledgerhq/errors": "npm:^6.16.4" + "@ledgerhq/hw-app-eth": "git+https://github.com:celo-org/ledgerjs-hw-app-eth.git" + "@ledgerhq/hw-transport-node-hid": "npm:^6.29.5" + "@vitest/coverage-v8": "npm:2.1.2" + dotenv: "npm:^8.2.0" + semver: "npm:^7.6.0" + viem: "npm:^2.21.14" + vitest: "npm:^2.1.2" + peerDependencies: + "@ledgerhq/hw-transport-node-hid": ^6.x + viem: 2.x + languageName: unknown + linkType: soft + "@celo/wallet-base@npm:^5.1.3": version: 5.1.3 resolution: "@celo/wallet-base@npm:5.1.3" @@ -2094,7 +2172,7 @@ __metadata: languageName: node linkType: hard -"@celo/wallet-base@npm:^6.0.1, @celo/wallet-base@workspace:packages/sdk/wallets/wallet-base": +"@celo/wallet-base@npm:^6.0.1, @celo/wallet-base@workspace:^, @celo/wallet-base@workspace:packages/sdk/wallets/wallet-base": version: 0.0.0-use.local resolution: "@celo/wallet-base@workspace:packages/sdk/wallets/wallet-base" dependencies: @@ -2268,7 +2346,7 @@ __metadata: languageName: unknown linkType: soft -"@celo/wallet-remote@npm:^6.0.1, @celo/wallet-remote@workspace:packages/sdk/wallets/wallet-remote": +"@celo/wallet-remote@npm:^6.0.1, @celo/wallet-remote@workspace:^, @celo/wallet-remote@workspace:packages/sdk/wallets/wallet-remote": version: 0.0.0-use.local resolution: "@celo/wallet-remote@workspace:packages/sdk/wallets/wallet-remote" dependencies: @@ -2640,6 +2718,167 @@ __metadata: languageName: node linkType: hard +"@esbuild/aix-ppc64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/aix-ppc64@npm:0.21.5" + conditions: os=aix & cpu=ppc64 + languageName: node + linkType: hard + +"@esbuild/android-arm64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/android-arm64@npm:0.21.5" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/android-arm@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/android-arm@npm:0.21.5" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + +"@esbuild/android-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/android-x64@npm:0.21.5" + conditions: os=android & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/darwin-arm64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/darwin-arm64@npm:0.21.5" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/darwin-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/darwin-x64@npm:0.21.5" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/freebsd-arm64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/freebsd-arm64@npm:0.21.5" + conditions: os=freebsd & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/freebsd-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/freebsd-x64@npm:0.21.5" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/linux-arm64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-arm64@npm:0.21.5" + conditions: os=linux & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/linux-arm@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-arm@npm:0.21.5" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@esbuild/linux-ia32@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-ia32@npm:0.21.5" + conditions: os=linux & cpu=ia32 + languageName: node + linkType: hard + +"@esbuild/linux-loong64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-loong64@npm:0.21.5" + conditions: os=linux & cpu=loong64 + languageName: node + linkType: hard + +"@esbuild/linux-mips64el@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-mips64el@npm:0.21.5" + conditions: os=linux & cpu=mips64el + languageName: node + linkType: hard + +"@esbuild/linux-ppc64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-ppc64@npm:0.21.5" + conditions: os=linux & cpu=ppc64 + languageName: node + linkType: hard + +"@esbuild/linux-riscv64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-riscv64@npm:0.21.5" + conditions: os=linux & cpu=riscv64 + languageName: node + linkType: hard + +"@esbuild/linux-s390x@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-s390x@npm:0.21.5" + conditions: os=linux & cpu=s390x + languageName: node + linkType: hard + +"@esbuild/linux-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-x64@npm:0.21.5" + conditions: os=linux & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/netbsd-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/netbsd-x64@npm:0.21.5" + conditions: os=netbsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/openbsd-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/openbsd-x64@npm:0.21.5" + conditions: os=openbsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/sunos-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/sunos-x64@npm:0.21.5" + conditions: os=sunos & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/win32-arm64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/win32-arm64@npm:0.21.5" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/win32-ia32@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/win32-ia32@npm:0.21.5" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@esbuild/win32-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/win32-x64@npm:0.21.5" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + "@eslint-community/eslint-utils@npm:^4.2.0, @eslint-community/eslint-utils@npm:^4.4.0": version: 4.4.0 resolution: "@eslint-community/eslint-utils@npm:4.4.0" @@ -3598,6 +3837,17 @@ __metadata: languageName: node linkType: hard +"@jridgewell/gen-mapping@npm:^0.3.5": + version: 0.3.5 + resolution: "@jridgewell/gen-mapping@npm:0.3.5" + dependencies: + "@jridgewell/set-array": "npm:^1.2.1" + "@jridgewell/sourcemap-codec": "npm:^1.4.10" + "@jridgewell/trace-mapping": "npm:^0.3.24" + checksum: 81587b3c4dd8e6c60252122937cea0c637486311f4ed208b52b62aae2e7a87598f63ec330e6cd0984af494bfb16d3f0d60d3b21d7e5b4aedd2602ff3fe9d32e2 + languageName: node + linkType: hard + "@jridgewell/resolve-uri@npm:3.1.0": version: 3.1.0 resolution: "@jridgewell/resolve-uri@npm:3.1.0" @@ -3619,6 +3869,13 @@ __metadata: languageName: node linkType: hard +"@jridgewell/set-array@npm:^1.2.1": + version: 1.2.1 + resolution: "@jridgewell/set-array@npm:1.2.1" + checksum: 832e513a85a588f8ed4f27d1279420d8547743cc37fcad5a5a76fc74bb895b013dfe614d0eed9cb860048e6546b798f8f2652020b4b2ba0561b05caa8c654b10 + languageName: node + linkType: hard + "@jridgewell/sourcemap-codec@npm:1.4.14": version: 1.4.14 resolution: "@jridgewell/sourcemap-codec@npm:1.4.14" @@ -3633,6 +3890,13 @@ __metadata: languageName: node linkType: hard +"@jridgewell/sourcemap-codec@npm:^1.5.0": + version: 1.5.0 + resolution: "@jridgewell/sourcemap-codec@npm:1.5.0" + checksum: 4ed6123217569a1484419ac53f6ea0d9f3b57e5b57ab30d7c267bdb27792a27eb0e4b08e84a2680aa55cc2f2b411ffd6ec3db01c44fdc6dc43aca4b55f8374fd + languageName: node + linkType: hard + "@jridgewell/trace-mapping@npm:0.3.9": version: 0.3.9 resolution: "@jridgewell/trace-mapping@npm:0.3.9" @@ -3663,6 +3927,16 @@ __metadata: languageName: node linkType: hard +"@jridgewell/trace-mapping@npm:^0.3.23, @jridgewell/trace-mapping@npm:^0.3.24": + version: 0.3.25 + resolution: "@jridgewell/trace-mapping@npm:0.3.25" + dependencies: + "@jridgewell/resolve-uri": "npm:^3.1.0" + "@jridgewell/sourcemap-codec": "npm:^1.4.14" + checksum: dced32160a44b49d531b80a4a2159dceab6b3ddf0c8e95a0deae4b0e894b172defa63d5ac52a19c2068e1fe7d31ea4ba931fbeec103233ecb4208953967120fc + languageName: node + linkType: hard + "@ledgerhq/cryptoassets@npm:^13.1.1": version: 13.1.1 resolution: "@ledgerhq/cryptoassets@npm:13.1.1" @@ -3710,6 +3984,18 @@ __metadata: languageName: node linkType: hard +"@ledgerhq/devices@npm:^8.4.4": + version: 8.4.4 + resolution: "@ledgerhq/devices@npm:8.4.4" + dependencies: + "@ledgerhq/errors": "npm:^6.19.1" + "@ledgerhq/logs": "npm:^6.12.0" + rxjs: "npm:^7.8.1" + semver: "npm:^7.3.5" + checksum: 57136fc45ae2fa42b3cf93eb7cc3542fd84010390b3d0a536d342c7e92f90e475d608b1774f17a547419edddd7df0d0b1b1dbd6d2c778009ebab0fc3ec313f67 + languageName: node + linkType: hard + "@ledgerhq/domain-service@npm:^1.2.1": version: 1.2.1 resolution: "@ledgerhq/domain-service@npm:1.2.1" @@ -3746,6 +4032,13 @@ __metadata: languageName: node linkType: hard +"@ledgerhq/errors@npm:^6.19.1": + version: 6.19.1 + resolution: "@ledgerhq/errors@npm:6.19.1" + checksum: 8265c6d73c314a4aabbe060ec29e2feebb4e904fe811bf7a9c53cde08e713dcbceded9d927ebb2f0ffc47a7b16524379d4a7e9aa3d61945b8a832be7cd5cf69b + languageName: node + linkType: hard + "@ledgerhq/evm-tools@npm:^1.1.1": version: 1.1.1 resolution: "@ledgerhq/evm-tools@npm:1.1.1" @@ -3805,6 +4098,19 @@ __metadata: languageName: node linkType: hard +"@ledgerhq/hw-transport-node-hid-noevents@npm:^6.30.5": + version: 6.30.5 + resolution: "@ledgerhq/hw-transport-node-hid-noevents@npm:6.30.5" + dependencies: + "@ledgerhq/devices": "npm:^8.4.4" + "@ledgerhq/errors": "npm:^6.19.1" + "@ledgerhq/hw-transport": "npm:^6.31.4" + "@ledgerhq/logs": "npm:^6.12.0" + node-hid: "npm:2.1.2" + checksum: 78d9524bcf441d8c8b909b7dd5e2322283dd4c896079bdc3cc9741a29f3798679ef031f497713c54cf3674bbdd6b84d772e6d74f2fda03a86f3450eee373fe9f + languageName: node + linkType: hard + "@ledgerhq/hw-transport-node-hid@npm:^6.28.5": version: 6.28.5 resolution: "@ledgerhq/hw-transport-node-hid@npm:6.28.5" @@ -3821,6 +4127,22 @@ __metadata: languageName: node linkType: hard +"@ledgerhq/hw-transport-node-hid@npm:^6.29.5": + version: 6.29.5 + resolution: "@ledgerhq/hw-transport-node-hid@npm:6.29.5" + dependencies: + "@ledgerhq/devices": "npm:^8.4.4" + "@ledgerhq/errors": "npm:^6.19.1" + "@ledgerhq/hw-transport": "npm:^6.31.4" + "@ledgerhq/hw-transport-node-hid-noevents": "npm:^6.30.5" + "@ledgerhq/logs": "npm:^6.12.0" + lodash: "npm:^4.17.21" + node-hid: "npm:2.1.2" + usb: "npm:2.9.0" + checksum: 60f071ec0582696794c70a884165c11a8f1bae26671f6ecebf66ccf0f6e87976ed762ca403ea0bb51e76355e674d4af2efc14bd1ea58eadb11ba17c3bee1a97a + languageName: node + linkType: hard + "@ledgerhq/hw-transport@npm:^6.30.5": version: 6.30.5 resolution: "@ledgerhq/hw-transport@npm:6.30.5" @@ -3857,6 +4179,18 @@ __metadata: languageName: node linkType: hard +"@ledgerhq/hw-transport@npm:^6.31.4": + version: 6.31.4 + resolution: "@ledgerhq/hw-transport@npm:6.31.4" + dependencies: + "@ledgerhq/devices": "npm:^8.4.4" + "@ledgerhq/errors": "npm:^6.19.1" + "@ledgerhq/logs": "npm:^6.12.0" + events: "npm:^3.3.0" + checksum: cf101e5b818e95e59031241d556dbec24658f54104910e414be493bc4b90b0aea50f5d4b3339a237dd0b12845bb2683c845f3a82f2ea9da4e077b68d1e1f7e48 + languageName: node + linkType: hard + "@ledgerhq/live-env@npm:^2.1.0": version: 2.1.0 resolution: "@ledgerhq/live-env@npm:2.1.0" @@ -3976,7 +4310,7 @@ __metadata: languageName: node linkType: hard -"@noble/curves@npm:^1.4.0": +"@noble/curves@npm:1.4.0, @noble/curves@npm:^1.4.0": version: 1.4.0 resolution: "@noble/curves@npm:1.4.0" dependencies: @@ -3985,6 +4319,15 @@ __metadata: languageName: node linkType: hard +"@noble/curves@npm:~1.4.0": + version: 1.4.2 + resolution: "@noble/curves@npm:1.4.2" + dependencies: + "@noble/hashes": "npm:1.4.0" + checksum: f433a2e8811ae345109388eadfa18ef2b0004c1f79417553241db4f0ad0d59550be6298a4f43d989c627e9f7551ffae6e402a4edf0173981e6da95fc7cab5123 + languageName: node + linkType: hard + "@noble/hashes@npm:1.2.0, @noble/hashes@npm:~1.2.0": version: 1.2.0 resolution: "@noble/hashes@npm:1.2.0" @@ -4013,13 +4356,20 @@ __metadata: languageName: node linkType: hard -"@noble/hashes@npm:1.4.0": +"@noble/hashes@npm:1.4.0, @noble/hashes@npm:~1.4.0": version: 1.4.0 resolution: "@noble/hashes@npm:1.4.0" checksum: e156e65794c473794c52fa9d06baf1eb20903d0d96719530f523cc4450f6c721a957c544796e6efd0197b2296e7cd70efeb312f861465e17940a3e3c7e0febc6 languageName: node linkType: hard +"@noble/hashes@npm:^1.4.0, @noble/hashes@npm:~1.5.0": + version: 1.5.0 + resolution: "@noble/hashes@npm:1.5.0" + checksum: da7fc7af52af7afcf59810a7eea6155075464ff462ffda2572dc6d57d53e2669b1ea2ec774e814f6273f1697e567f28d36823776c9bf7068cba2a2855140f26e + languageName: node + linkType: hard + "@noble/hashes@npm:~1.3.0, @noble/hashes@npm:~1.3.1": version: 1.3.2 resolution: "@noble/hashes@npm:1.3.2" @@ -4521,6 +4871,118 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-android-arm-eabi@npm:4.24.0": + version: 4.24.0 + resolution: "@rollup/rollup-android-arm-eabi@npm:4.24.0" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + +"@rollup/rollup-android-arm64@npm:4.24.0": + version: 4.24.0 + resolution: "@rollup/rollup-android-arm64@npm:4.24.0" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@rollup/rollup-darwin-arm64@npm:4.24.0": + version: 4.24.0 + resolution: "@rollup/rollup-darwin-arm64@npm:4.24.0" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@rollup/rollup-darwin-x64@npm:4.24.0": + version: 4.24.0 + resolution: "@rollup/rollup-darwin-x64@npm:4.24.0" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@rollup/rollup-linux-arm-gnueabihf@npm:4.24.0": + version: 4.24.0 + resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.24.0" + conditions: os=linux & cpu=arm & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-arm-musleabihf@npm:4.24.0": + version: 4.24.0 + resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.24.0" + conditions: os=linux & cpu=arm & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-linux-arm64-gnu@npm:4.24.0": + version: 4.24.0 + resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.24.0" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-arm64-musl@npm:4.24.0": + version: 4.24.0 + resolution: "@rollup/rollup-linux-arm64-musl@npm:4.24.0" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-linux-powerpc64le-gnu@npm:4.24.0": + version: 4.24.0 + resolution: "@rollup/rollup-linux-powerpc64le-gnu@npm:4.24.0" + conditions: os=linux & cpu=ppc64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-riscv64-gnu@npm:4.24.0": + version: 4.24.0 + resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.24.0" + conditions: os=linux & cpu=riscv64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-s390x-gnu@npm:4.24.0": + version: 4.24.0 + resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.24.0" + conditions: os=linux & cpu=s390x & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-x64-gnu@npm:4.24.0": + version: 4.24.0 + resolution: "@rollup/rollup-linux-x64-gnu@npm:4.24.0" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-x64-musl@npm:4.24.0": + version: 4.24.0 + resolution: "@rollup/rollup-linux-x64-musl@npm:4.24.0" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-win32-arm64-msvc@npm:4.24.0": + version: 4.24.0 + resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.24.0" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@rollup/rollup-win32-ia32-msvc@npm:4.24.0": + version: 4.24.0 + resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.24.0" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@rollup/rollup-win32-x64-msvc@npm:4.24.0": + version: 4.24.0 + resolution: "@rollup/rollup-win32-x64-msvc@npm:4.24.0" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + "@scure/base@npm:~1.1.0, @scure/base@npm:~1.1.4": version: 1.1.5 resolution: "@scure/base@npm:1.1.5" @@ -4528,6 +4990,13 @@ __metadata: languageName: node linkType: hard +"@scure/base@npm:~1.1.6, @scure/base@npm:~1.1.8": + version: 1.1.9 + resolution: "@scure/base@npm:1.1.9" + checksum: f0ab7f687bbcdee2a01377fe3cd808bf63977999672751295b6a92625d5322f4754a96d40f6bd579bc367aad48ecf8a4e6d0390e70296e6ded1076f52adb16bb + languageName: node + linkType: hard + "@scure/bip32@npm:1.1.5": version: 1.1.5 resolution: "@scure/bip32@npm:1.1.5" @@ -4561,6 +5030,17 @@ __metadata: languageName: node linkType: hard +"@scure/bip32@npm:1.4.0": + version: 1.4.0 + resolution: "@scure/bip32@npm:1.4.0" + dependencies: + "@noble/curves": "npm:~1.4.0" + "@noble/hashes": "npm:~1.4.0" + "@scure/base": "npm:~1.1.6" + checksum: 6cd5062d902564d9e970597ec8b1adacb415b2eadfbb95aee1a1a0480a52eb0de4d294d3753aa8b48548064c9795ed108d348a31a8ce3fc88785377bb12c63b9 + languageName: node + linkType: hard + "@scure/bip32@npm:^1.3.3": version: 1.3.3 resolution: "@scure/bip32@npm:1.3.3" @@ -4602,6 +5082,16 @@ __metadata: languageName: node linkType: hard +"@scure/bip39@npm:1.4.0": + version: 1.4.0 + resolution: "@scure/bip39@npm:1.4.0" + dependencies: + "@noble/hashes": "npm:~1.5.0" + "@scure/base": "npm:~1.1.8" + checksum: f86e0e79768c95bc684ed6de92892b1a6f228db0f8fab836f091c0ec0f6d1e291b8c4391cfbeaa9ea83f41045613535b1940cd10e7d780a5b73db163b1e7f151 + languageName: node + linkType: hard + "@scure/bip39@npm:^1.2.2": version: 1.2.2 resolution: "@scure/bip39@npm:1.2.2" @@ -5777,6 +6267,13 @@ __metadata: languageName: node linkType: hard +"@types/estree@npm:1.0.6, @types/estree@npm:^1.0.0": + version: 1.0.6 + resolution: "@types/estree@npm:1.0.6" + checksum: 9d35d475095199c23e05b431bcdd1f6fec7380612aed068b14b2a08aa70494de8a9026765a5a91b1073f636fb0368f6d8973f518a31391d519e20c59388ed88d + languageName: node + linkType: hard + "@types/fs-extra@npm:^8.0.0, @types/fs-extra@npm:^8.1.0": version: 8.1.5 resolution: "@types/fs-extra@npm:8.1.5" @@ -6356,6 +6853,114 @@ __metadata: languageName: node linkType: hard +"@vitest/coverage-v8@npm:2.1.2": + version: 2.1.2 + resolution: "@vitest/coverage-v8@npm:2.1.2" + dependencies: + "@ampproject/remapping": "npm:^2.3.0" + "@bcoe/v8-coverage": "npm:^0.2.3" + debug: "npm:^4.3.6" + istanbul-lib-coverage: "npm:^3.2.2" + istanbul-lib-report: "npm:^3.0.1" + istanbul-lib-source-maps: "npm:^5.0.6" + istanbul-reports: "npm:^3.1.7" + magic-string: "npm:^0.30.11" + magicast: "npm:^0.3.4" + std-env: "npm:^3.7.0" + test-exclude: "npm:^7.0.1" + tinyrainbow: "npm:^1.2.0" + peerDependencies: + "@vitest/browser": 2.1.2 + vitest: 2.1.2 + peerDependenciesMeta: + "@vitest/browser": + optional: true + checksum: 513b96310eacc99f97f8beb95801c725788b5d64434a820d0008dd94731a09250f68d31a84bbb6cdf3110ee9ad86b4c50d02c1d3d4d651bf56bac4b409b95a62 + languageName: node + linkType: hard + +"@vitest/expect@npm:2.1.2": + version: 2.1.2 + resolution: "@vitest/expect@npm:2.1.2" + dependencies: + "@vitest/spy": "npm:2.1.2" + "@vitest/utils": "npm:2.1.2" + chai: "npm:^5.1.1" + tinyrainbow: "npm:^1.2.0" + checksum: 0e2991295a6b9c51e2d074d1185317dcb2d85d1e9b5045299431fd7b84e51a847942911b08efad2379f56bb4dfe2f02442abd267df348751c61c86bc7b3154a3 + languageName: node + linkType: hard + +"@vitest/mocker@npm:2.1.2": + version: 2.1.2 + resolution: "@vitest/mocker@npm:2.1.2" + dependencies: + "@vitest/spy": "npm:^2.1.0-beta.1" + estree-walker: "npm:^3.0.3" + magic-string: "npm:^0.30.11" + peerDependencies: + "@vitest/spy": 2.1.2 + msw: ^2.3.5 + vite: ^5.0.0 + peerDependenciesMeta: + msw: + optional: true + vite: + optional: true + checksum: f6ec9aa061c21877322bf3f0b12bf4e78eba3f092174a506b2d2d479b78e36b4d46a6458cd23d3bf3cbdcf212276cf5d1a87234ae2014e8362ea2afc23e46bec + languageName: node + linkType: hard + +"@vitest/pretty-format@npm:2.1.2, @vitest/pretty-format@npm:^2.1.2": + version: 2.1.2 + resolution: "@vitest/pretty-format@npm:2.1.2" + dependencies: + tinyrainbow: "npm:^1.2.0" + checksum: 5866fb3c45e794b695a9f62f76b886a8a8d07d711f7187e9e769fd614bc62df1f87d076880c032d5cd8c0272c385fe824c12191b04a3ca44a8bb9fed1a0c3693 + languageName: node + linkType: hard + +"@vitest/runner@npm:2.1.2": + version: 2.1.2 + resolution: "@vitest/runner@npm:2.1.2" + dependencies: + "@vitest/utils": "npm:2.1.2" + pathe: "npm:^1.1.2" + checksum: 60b086e39a31dd664875746b0da3a2402d4088801306e87fe25f20dc660abda50afd3e5ec6ea34ef0849f5652ac05ce2a93a13ea4d5dd16a549d9882941de328 + languageName: node + linkType: hard + +"@vitest/snapshot@npm:2.1.2": + version: 2.1.2 + resolution: "@vitest/snapshot@npm:2.1.2" + dependencies: + "@vitest/pretty-format": "npm:2.1.2" + magic-string: "npm:^0.30.11" + pathe: "npm:^1.1.2" + checksum: acd29f59883899c660eeba5950366e4f9f799cb29e7edd65575a7b6ad319a1df4d7a46a95048f8f9475f4c6f46cea198a7ecfab06e88e435dfd4989b365b917f + languageName: node + linkType: hard + +"@vitest/spy@npm:2.1.2, @vitest/spy@npm:^2.1.0-beta.1": + version: 2.1.2 + resolution: "@vitest/spy@npm:2.1.2" + dependencies: + tinyspy: "npm:^3.0.0" + checksum: 0183ab53b431bd6a08531752113780e15202ebd7579eed25b9bf87c849f75d74d0e4f346d886034cd9dd1381aa8814b3e468f141f41f7539b75f30268df35a79 + languageName: node + linkType: hard + +"@vitest/utils@npm:2.1.2": + version: 2.1.2 + resolution: "@vitest/utils@npm:2.1.2" + dependencies: + "@vitest/pretty-format": "npm:2.1.2" + loupe: "npm:^3.1.1" + tinyrainbow: "npm:^1.2.0" + checksum: fa898ea6312cb62e4027f55b06859d84ba50ac20e583bab2889eeadea41d73baf6022ed87547deec6251cd8021f1df13d2ea4515ab253582c3ca93226acd6313 + languageName: node + linkType: hard + "@wagmi/chains@npm:1.6.0": version: 1.6.0 resolution: "@wagmi/chains@npm:1.6.0" @@ -6390,6 +6995,21 @@ __metadata: languageName: node linkType: hard +"abitype@npm:1.0.5": + version: 1.0.5 + resolution: "abitype@npm:1.0.5" + peerDependencies: + typescript: ">=5.0.4" + zod: ^3 >=3.22.0 + peerDependenciesMeta: + typescript: + optional: true + zod: + optional: true + checksum: 1acd0d9687945dd78442b71bd84ff3b9dceae27d15f0d8b14b16554a0c8c9518eeb971ff8e94d507f4d9f05a8a8b91eb8fafd735eaecebac37d5c5a4aac06d8e + languageName: node + linkType: hard + "abort-controller@npm:^3.0.0": version: 3.0.0 resolution: "abort-controller@npm:3.0.0" @@ -6827,6 +7447,13 @@ __metadata: languageName: node linkType: hard +"assertion-error@npm:^2.0.1": + version: 2.0.1 + resolution: "assertion-error@npm:2.0.1" + checksum: a0789dd882211b87116e81e2648ccb7f60340b34f19877dd020b39ebb4714e475eb943e14ba3e22201c221ef6645b7bfe10297e76b6ac95b48a9898c1211ce66 + languageName: node + linkType: hard + "astral-regex@npm:^2.0.0": version: 2.0.0 resolution: "astral-regex@npm:2.0.0" @@ -7523,6 +8150,13 @@ __metadata: languageName: node linkType: hard +"cac@npm:^6.7.14": + version: 6.7.14 + resolution: "cac@npm:6.7.14" + checksum: 002769a0fbfc51c062acd2a59df465a2a947916b02ac50b56c69ec6c018ee99ac3e7f4dd7366334ea847f1ecacf4defaa61bcd2ac283db50156ce1f1d8c8ad42 + languageName: node + linkType: hard + "cacache@npm:^18.0.0": version: 18.0.1 resolution: "cacache@npm:18.0.1" @@ -7791,6 +8425,19 @@ __metadata: languageName: unknown linkType: soft +"chai@npm:^5.1.1": + version: 5.1.1 + resolution: "chai@npm:5.1.1" + dependencies: + assertion-error: "npm:^2.0.1" + check-error: "npm:^2.1.1" + deep-eql: "npm:^5.0.1" + loupe: "npm:^3.1.0" + pathval: "npm:^2.0.0" + checksum: ee67279a5613bd36dc1dc13660042429ae2f1dc5a9030a6abcf381345866dfb5bce7bc10b9d74c8de86b6f656489f654bbbef3f3361e06925591e6a00c72afff + languageName: node + linkType: hard + "chalk@npm:^2.0.0, chalk@npm:^2.1.0, chalk@npm:^2.3.2, chalk@npm:^2.4.2": version: 2.4.2 resolution: "chalk@npm:2.4.2" @@ -7879,6 +8526,13 @@ __metadata: languageName: node linkType: hard +"check-error@npm:^2.1.1": + version: 2.1.1 + resolution: "check-error@npm:2.1.1" + checksum: d785ed17b1d4a4796b6e75c765a9a290098cf52ff9728ce0756e8ffd4293d2e419dd30c67200aee34202463b474306913f2fcfaf1890641026d9fc6966fea27a + languageName: node + linkType: hard + "cheerio-select@npm:^2.1.0": version: 2.1.0 resolution: "cheerio-select@npm:2.1.0" @@ -8772,6 +9426,13 @@ __metadata: languageName: node linkType: hard +"deep-eql@npm:^5.0.1": + version: 5.0.2 + resolution: "deep-eql@npm:5.0.2" + checksum: a529b81e2ef8821621d20a36959a0328873a3e49d393ad11f8efe8559f31239494c2eb889b80342808674c475802ba95b9d6c4c27641b9a029405104c1b59fcf + languageName: node + linkType: hard + "deep-extend@npm:^0.6.0": version: 0.6.0 resolution: "deep-extend@npm:0.6.0" @@ -9365,6 +10026,86 @@ __metadata: languageName: node linkType: hard +"esbuild@npm:^0.21.3": + version: 0.21.5 + resolution: "esbuild@npm:0.21.5" + dependencies: + "@esbuild/aix-ppc64": "npm:0.21.5" + "@esbuild/android-arm": "npm:0.21.5" + "@esbuild/android-arm64": "npm:0.21.5" + "@esbuild/android-x64": "npm:0.21.5" + "@esbuild/darwin-arm64": "npm:0.21.5" + "@esbuild/darwin-x64": "npm:0.21.5" + "@esbuild/freebsd-arm64": "npm:0.21.5" + "@esbuild/freebsd-x64": "npm:0.21.5" + "@esbuild/linux-arm": "npm:0.21.5" + "@esbuild/linux-arm64": "npm:0.21.5" + "@esbuild/linux-ia32": "npm:0.21.5" + "@esbuild/linux-loong64": "npm:0.21.5" + "@esbuild/linux-mips64el": "npm:0.21.5" + "@esbuild/linux-ppc64": "npm:0.21.5" + "@esbuild/linux-riscv64": "npm:0.21.5" + "@esbuild/linux-s390x": "npm:0.21.5" + "@esbuild/linux-x64": "npm:0.21.5" + "@esbuild/netbsd-x64": "npm:0.21.5" + "@esbuild/openbsd-x64": "npm:0.21.5" + "@esbuild/sunos-x64": "npm:0.21.5" + "@esbuild/win32-arm64": "npm:0.21.5" + "@esbuild/win32-ia32": "npm:0.21.5" + "@esbuild/win32-x64": "npm:0.21.5" + dependenciesMeta: + "@esbuild/aix-ppc64": + optional: true + "@esbuild/android-arm": + optional: true + "@esbuild/android-arm64": + optional: true + "@esbuild/android-x64": + optional: true + "@esbuild/darwin-arm64": + optional: true + "@esbuild/darwin-x64": + optional: true + "@esbuild/freebsd-arm64": + optional: true + "@esbuild/freebsd-x64": + optional: true + "@esbuild/linux-arm": + optional: true + "@esbuild/linux-arm64": + optional: true + "@esbuild/linux-ia32": + optional: true + "@esbuild/linux-loong64": + optional: true + "@esbuild/linux-mips64el": + optional: true + "@esbuild/linux-ppc64": + optional: true + "@esbuild/linux-riscv64": + optional: true + "@esbuild/linux-s390x": + optional: true + "@esbuild/linux-x64": + optional: true + "@esbuild/netbsd-x64": + optional: true + "@esbuild/openbsd-x64": + optional: true + "@esbuild/sunos-x64": + optional: true + "@esbuild/win32-arm64": + optional: true + "@esbuild/win32-ia32": + optional: true + "@esbuild/win32-x64": + optional: true + bin: + esbuild: bin/esbuild + checksum: d2ff2ca84d30cce8e871517374d6c2290835380dc7cd413b2d49189ed170d45e407be14de2cb4794cf76f75cf89955c4714726ebd3de7444b3046f5cab23ab6b + languageName: node + linkType: hard + "escalade@npm:^3.1.1": version: 3.1.1 resolution: "escalade@npm:3.1.1" @@ -9598,6 +10339,15 @@ __metadata: languageName: node linkType: hard +"estree-walker@npm:^3.0.3": + version: 3.0.3 + resolution: "estree-walker@npm:3.0.3" + dependencies: + "@types/estree": "npm:^1.0.0" + checksum: a65728d5727b71de172c5df323385755a16c0fdab8234dc756c3854cfee343261ddfbb72a809a5660fac8c75d960bb3e21aa898c2d7e9b19bb298482ca58a3af + languageName: node + linkType: hard + "esutils@npm:^2.0.2": version: 2.0.3 resolution: "esutils@npm:2.0.3" @@ -10491,19 +11241,38 @@ __metadata: languageName: node linkType: hard -"fsevents@npm:^2.3.2": +"fsevents@npm:^2.3.2": + version: 2.3.2 + resolution: "fsevents@npm:2.3.2" + dependencies: + node-gyp: "npm:latest" + checksum: 6b5b6f5692372446ff81cf9501c76e3e0459a4852b3b5f1fc72c103198c125a6b8c72f5f166bdd76ffb2fca261e7f6ee5565daf80dca6e571e55bcc589cc1256 + conditions: os=darwin + languageName: node + linkType: hard + +"fsevents@npm:~2.3.2, fsevents@npm:~2.3.3": + version: 2.3.3 + resolution: "fsevents@npm:2.3.3" + dependencies: + node-gyp: "npm:latest" + checksum: 4c1ade961ded57cdbfbb5cac5106ec17bc8bccd62e16343c569a0ceeca83b9dfef87550b4dc5cbb89642da412b20c5071f304c8c464b80415446e8e155a038c0 + conditions: os=darwin + languageName: node + linkType: hard + +"fsevents@patch:fsevents@npm%3A^2.3.2#optional!builtin": version: 2.3.2 - resolution: "fsevents@npm:2.3.2" + resolution: "fsevents@patch:fsevents@npm%3A2.3.2#optional!builtin::version=2.3.2&hash=df0bf1" dependencies: node-gyp: "npm:latest" - checksum: 6b5b6f5692372446ff81cf9501c76e3e0459a4852b3b5f1fc72c103198c125a6b8c72f5f166bdd76ffb2fca261e7f6ee5565daf80dca6e571e55bcc589cc1256 conditions: os=darwin languageName: node linkType: hard -"fsevents@patch:fsevents@npm%3A^2.3.2#optional!builtin": - version: 2.3.2 - resolution: "fsevents@patch:fsevents@npm%3A2.3.2#optional!builtin::version=2.3.2&hash=df0bf1" +"fsevents@patch:fsevents@npm%3A~2.3.2#optional!builtin, fsevents@patch:fsevents@npm%3A~2.3.3#optional!builtin": + version: 2.3.3 + resolution: "fsevents@patch:fsevents@npm%3A2.3.3#optional!builtin::version=2.3.3&hash=df0bf1" dependencies: node-gyp: "npm:latest" conditions: os=darwin @@ -10633,6 +11402,13 @@ __metadata: languageName: node linkType: hard +"get-func-name@npm:^2.0.1": + version: 2.0.2 + resolution: "get-func-name@npm:2.0.2" + checksum: 3f62f4c23647de9d46e6f76d2b3eafe58933a9b3830c60669e4180d6c601ce1b4aa310ba8366143f55e52b139f992087a9f0647274e8745621fa2af7e0acf13b + languageName: node + linkType: hard + "get-intrinsic@npm:^1.0.2, get-intrinsic@npm:^1.1.1, get-intrinsic@npm:^1.1.3, get-intrinsic@npm:^1.2.0, get-intrinsic@npm:^1.2.1, get-intrinsic@npm:^1.2.2": version: 1.2.2 resolution: "get-intrinsic@npm:1.2.2" @@ -10762,6 +11538,22 @@ __metadata: languageName: node linkType: hard +"glob@npm:^10.4.1": + version: 10.4.5 + resolution: "glob@npm:10.4.5" + dependencies: + foreground-child: "npm:^3.1.0" + jackspeak: "npm:^3.1.2" + minimatch: "npm:^9.0.4" + minipass: "npm:^7.1.2" + package-json-from-dist: "npm:^1.0.0" + path-scurry: "npm:^1.11.1" + bin: + glob: dist/esm/bin.mjs + checksum: 698dfe11828b7efd0514cd11e573eaed26b2dff611f0400907281ce3eab0c1e56143ef9b35adc7c77ecc71fba74717b510c7c223d34ca8a98ec81777b293d4ac + languageName: node + linkType: hard + "glob@npm:^6.0.1": version: 6.0.4 resolution: "glob@npm:6.0.4" @@ -12117,6 +12909,15 @@ __metadata: languageName: node linkType: hard +"isows@npm:1.0.4": + version: 1.0.4 + resolution: "isows@npm:1.0.4" + peerDependencies: + ws: "*" + checksum: a3ee62e3d6216abb3adeeb2a551fe2e7835eac87b05a6ecc3e7739259bf5f8e83290501f49e26137390c8093f207fc3378d4a7653aab76ad7bbab4b2dba9c5b9 + languageName: node + linkType: hard + "isstream@npm:~0.1.2": version: 0.1.2 resolution: "isstream@npm:0.1.2" @@ -12131,6 +12932,13 @@ __metadata: languageName: node linkType: hard +"istanbul-lib-coverage@npm:^3.2.2": + version: 3.2.2 + resolution: "istanbul-lib-coverage@npm:3.2.2" + checksum: 40bbdd1e937dfd8c830fa286d0f665e81b7a78bdabcd4565f6d5667c99828bda3db7fb7ac6b96a3e2e8a2461ddbc5452d9f8bc7d00cb00075fa6a3e99f5b6a81 + languageName: node + linkType: hard + "istanbul-lib-instrument@npm:^5.0.4": version: 5.2.1 resolution: "istanbul-lib-instrument@npm:5.2.1" @@ -12168,6 +12976,17 @@ __metadata: languageName: node linkType: hard +"istanbul-lib-report@npm:^3.0.1": + version: 3.0.1 + resolution: "istanbul-lib-report@npm:3.0.1" + dependencies: + istanbul-lib-coverage: "npm:^3.0.0" + make-dir: "npm:^4.0.0" + supports-color: "npm:^7.1.0" + checksum: 86a83421ca1cf2109a9f6d193c06c31ef04a45e72a74579b11060b1e7bb9b6337a4e6f04abfb8857e2d569c271273c65e855ee429376a0d7c91ad91db42accd1 + languageName: node + linkType: hard + "istanbul-lib-source-maps@npm:^4.0.0": version: 4.0.1 resolution: "istanbul-lib-source-maps@npm:4.0.1" @@ -12179,6 +12998,17 @@ __metadata: languageName: node linkType: hard +"istanbul-lib-source-maps@npm:^5.0.6": + version: 5.0.6 + resolution: "istanbul-lib-source-maps@npm:5.0.6" + dependencies: + "@jridgewell/trace-mapping": "npm:^0.3.23" + debug: "npm:^4.1.1" + istanbul-lib-coverage: "npm:^3.0.0" + checksum: 569dd0a392ee3464b1fe1accbaef5cc26de3479eacb5b91d8c67ebb7b425d39fd02247d85649c3a0e9c29b600809fa60b5af5a281a75a89c01f385b1e24823a2 + languageName: node + linkType: hard + "istanbul-reports@npm:^3.1.3": version: 3.1.5 resolution: "istanbul-reports@npm:3.1.5" @@ -12189,6 +13019,16 @@ __metadata: languageName: node linkType: hard +"istanbul-reports@npm:^3.1.7": + version: 3.1.7 + resolution: "istanbul-reports@npm:3.1.7" + dependencies: + html-escaper: "npm:^2.0.0" + istanbul-lib-report: "npm:^3.0.0" + checksum: f1faaa4684efaf57d64087776018d7426312a59aa6eeb4e0e3a777347d23cd286ad18f427e98f0e3dee666103d7404c9d7abc5f240406a912fa16bd6695437fa + languageName: node + linkType: hard + "jackspeak@npm:^2.3.5": version: 2.3.6 resolution: "jackspeak@npm:2.3.6" @@ -12202,6 +13042,19 @@ __metadata: languageName: node linkType: hard +"jackspeak@npm:^3.1.2": + version: 3.4.3 + resolution: "jackspeak@npm:3.4.3" + dependencies: + "@isaacs/cliui": "npm:^8.0.2" + "@pkgjs/parseargs": "npm:^0.11.0" + dependenciesMeta: + "@pkgjs/parseargs": + optional: true + checksum: 96f8786eaab98e4bf5b2a5d6d9588ea46c4d06bbc4f2eb861fdd7b6b182b16f71d8a70e79820f335d52653b16d4843b29dd9cdcf38ae80406756db9199497cf3 + languageName: node + linkType: hard + "jake@npm:^10.8.5": version: 10.8.5 resolution: "jake@npm:10.8.5" @@ -13425,6 +14278,15 @@ __metadata: languageName: node linkType: hard +"loupe@npm:^3.1.0, loupe@npm:^3.1.1": + version: 3.1.1 + resolution: "loupe@npm:3.1.1" + dependencies: + get-func-name: "npm:^2.0.1" + checksum: 56d71d64c5af109aaf2b5343668ea5952eed468ed2ff837373810e417bf8331f14491c6e4d38e08ff84a29cb18906e06e58ba660c53bd00f2989e1873fa2f54c + languageName: node + linkType: hard + "lower-case-first@npm:^1.0.0": version: 1.0.2 resolution: "lower-case-first@npm:1.0.2" @@ -13471,6 +14333,13 @@ __metadata: languageName: node linkType: hard +"lru-cache@npm:^10.2.0": + version: 10.4.3 + resolution: "lru-cache@npm:10.4.3" + checksum: e6e90267360476720fa8e83cc168aa2bf0311f3f2eea20a6ba78b90a885ae72071d9db132f40fda4129c803e7dcec3a6b6a6fbb44ca90b081630b810b5d6a41a + languageName: node + linkType: hard + "lru-cache@npm:^4.0.1": version: 4.1.5 resolution: "lru-cache@npm:4.1.5" @@ -13506,6 +14375,26 @@ __metadata: languageName: node linkType: hard +"magic-string@npm:^0.30.11": + version: 0.30.11 + resolution: "magic-string@npm:0.30.11" + dependencies: + "@jridgewell/sourcemap-codec": "npm:^1.5.0" + checksum: b784d2240252f5b1e755d487354ada4c672cbca16f045144f7185a75b059210e5fcca7be7be03ef1bac2ca754c4428b21d36ae64a9057ba429916f06b8c54eb2 + languageName: node + linkType: hard + +"magicast@npm:^0.3.4": + version: 0.3.5 + resolution: "magicast@npm:0.3.5" + dependencies: + "@babel/parser": "npm:^7.25.4" + "@babel/types": "npm:^7.25.4" + source-map-js: "npm:^1.2.0" + checksum: 3a2dba6b0bdde957797361d09c7931ebdc1b30231705360eeb40ed458d28e1c3112841c3ed4e1b87ceb28f741e333c7673cd961193aa9fdb4f4946b202e6205a + languageName: node + linkType: hard + "make-dir@npm:^3.0.0": version: 3.1.0 resolution: "make-dir@npm:3.1.0" @@ -13515,6 +14404,15 @@ __metadata: languageName: node linkType: hard +"make-dir@npm:^4.0.0": + version: 4.0.0 + resolution: "make-dir@npm:4.0.0" + dependencies: + semver: "npm:^7.5.3" + checksum: bf0731a2dd3aab4db6f3de1585cea0b746bb73eb5a02e3d8d72757e376e64e6ada190b1eddcde5b2f24a81b688a9897efd5018737d05e02e2a671dda9cff8a8a + languageName: node + linkType: hard + "make-error@npm:1.x, make-error@npm:^1.1.1": version: 1.3.6 resolution: "make-error@npm:1.3.6" @@ -13927,6 +14825,13 @@ __metadata: languageName: node linkType: hard +"minipass@npm:^7.1.2": + version: 7.1.2 + resolution: "minipass@npm:7.1.2" + checksum: c25f0ee8196d8e6036661104bacd743785b2599a21de5c516b32b3fa2b83113ac89a2358465bc04956baab37ffb956ae43be679b2262bf7be15fce467ccd7950 + languageName: node + linkType: hard + "minizlib@npm:^1.3.3": version: 1.3.3 resolution: "minizlib@npm:1.3.3" @@ -14158,6 +15063,15 @@ __metadata: languageName: node linkType: hard +"nanoid@npm:^3.3.7": + version: 3.3.7 + resolution: "nanoid@npm:3.3.7" + bin: + nanoid: bin/nanoid.cjs + checksum: ac1eb60f615b272bccb0e2b9cd933720dad30bf9708424f691b8113826bb91aca7e9d14ef5d9415a6ba15c266b37817256f58d8ce980c82b0ba3185352565679 + languageName: node + linkType: hard + "napi-build-utils@npm:^1.0.1": version: 1.0.2 resolution: "napi-build-utils@npm:1.0.2" @@ -14396,7 +15310,7 @@ __metadata: languageName: node linkType: hard -"node-hid@npm:^2.1.2": +"node-hid@npm:2.1.2, node-hid@npm:^2.1.2": version: 2.1.2 resolution: "node-hid@npm:2.1.2" dependencies: @@ -15107,6 +16021,13 @@ __metadata: languageName: node linkType: hard +"package-json-from-dist@npm:^1.0.0": + version: 1.0.1 + resolution: "package-json-from-dist@npm:1.0.1" + checksum: 58ee9538f2f762988433da00e26acc788036914d57c71c246bf0be1b60cdbd77dd60b6a3e1a30465f0b248aeb80079e0b34cb6050b1dfa18c06953bb1cbc7602 + languageName: node + linkType: hard + "pacote@npm:^17.0.0, pacote@npm:^17.0.4": version: 17.0.5 resolution: "pacote@npm:17.0.5" @@ -15376,6 +16297,16 @@ __metadata: languageName: node linkType: hard +"path-scurry@npm:^1.11.1": + version: 1.11.1 + resolution: "path-scurry@npm:1.11.1" + dependencies: + lru-cache: "npm:^10.2.0" + minipass: "npm:^5.0.0 || ^6.0.2 || ^7.0.0" + checksum: 5e8845c159261adda6f09814d7725683257fcc85a18f329880ab4d7cc1d12830967eae5d5894e453f341710d5484b8fdbbd4d75181b4d6e1eb2f4dc7aeadc434 + languageName: node + linkType: hard + "path-to-regexp@npm:0.1.7": version: 0.1.7 resolution: "path-to-regexp@npm:0.1.7" @@ -15418,6 +16349,20 @@ __metadata: languageName: node linkType: hard +"pathe@npm:^1.1.2": + version: 1.1.2 + resolution: "pathe@npm:1.1.2" + checksum: f201d796351bf7433d147b92c20eb154a4e0ea83512017bf4ec4e492a5d6e738fb45798be4259a61aa81270179fce11026f6ff0d3fa04173041de044defe9d80 + languageName: node + linkType: hard + +"pathval@npm:^2.0.0": + version: 2.0.0 + resolution: "pathval@npm:2.0.0" + checksum: b91575bf9cdf01757afd7b5e521eb8a0b874a49bc972d08e0047cfea0cd3c019f5614521d4bc83d2855e3fcc331db6817dfd533dd8f3d90b16bc76fad2450fc1 + languageName: node + linkType: hard + "pbkdf2@npm:^3.0.17": version: 3.1.2 resolution: "pbkdf2@npm:3.1.2" @@ -15445,6 +16390,13 @@ __metadata: languageName: node linkType: hard +"picocolors@npm:^1.1.0": + version: 1.1.0 + resolution: "picocolors@npm:1.1.0" + checksum: a2ad60d94d185c30f2a140b19c512547713fb89b920d32cc6cf658fa786d63a37ba7b8451872c3d9fc34883971fb6e5878e07a20b60506e0bb2554dce9169ccb + languageName: node + linkType: hard + "picomatch@npm:^2.0.4, picomatch@npm:^2.2.3, picomatch@npm:^2.3.1": version: 2.3.1 resolution: "picomatch@npm:2.3.1" @@ -15522,6 +16474,17 @@ __metadata: languageName: node linkType: hard +"postcss@npm:^8.4.43": + version: 8.4.47 + resolution: "postcss@npm:8.4.47" + dependencies: + nanoid: "npm:^3.3.7" + picocolors: "npm:^1.1.0" + source-map-js: "npm:^1.2.1" + checksum: f2b50ba9b6fcb795232b6bb20de7cdc538c0025989a8ed9c4438d1960196ba3b7eaff41fdb1a5c701b3504651ea87aeb685577707f0ae4d6ce6f3eae5df79a81 + languageName: node + linkType: hard + "prebuild-install@npm:^7.1.1": version: 7.1.1 resolution: "prebuild-install@npm:7.1.1" @@ -16487,6 +17450,69 @@ __metadata: languageName: node linkType: hard +"rollup@npm:^4.20.0": + version: 4.24.0 + resolution: "rollup@npm:4.24.0" + dependencies: + "@rollup/rollup-android-arm-eabi": "npm:4.24.0" + "@rollup/rollup-android-arm64": "npm:4.24.0" + "@rollup/rollup-darwin-arm64": "npm:4.24.0" + "@rollup/rollup-darwin-x64": "npm:4.24.0" + "@rollup/rollup-linux-arm-gnueabihf": "npm:4.24.0" + "@rollup/rollup-linux-arm-musleabihf": "npm:4.24.0" + "@rollup/rollup-linux-arm64-gnu": "npm:4.24.0" + "@rollup/rollup-linux-arm64-musl": "npm:4.24.0" + "@rollup/rollup-linux-powerpc64le-gnu": "npm:4.24.0" + "@rollup/rollup-linux-riscv64-gnu": "npm:4.24.0" + "@rollup/rollup-linux-s390x-gnu": "npm:4.24.0" + "@rollup/rollup-linux-x64-gnu": "npm:4.24.0" + "@rollup/rollup-linux-x64-musl": "npm:4.24.0" + "@rollup/rollup-win32-arm64-msvc": "npm:4.24.0" + "@rollup/rollup-win32-ia32-msvc": "npm:4.24.0" + "@rollup/rollup-win32-x64-msvc": "npm:4.24.0" + "@types/estree": "npm:1.0.6" + fsevents: "npm:~2.3.2" + dependenciesMeta: + "@rollup/rollup-android-arm-eabi": + optional: true + "@rollup/rollup-android-arm64": + optional: true + "@rollup/rollup-darwin-arm64": + optional: true + "@rollup/rollup-darwin-x64": + optional: true + "@rollup/rollup-linux-arm-gnueabihf": + optional: true + "@rollup/rollup-linux-arm-musleabihf": + optional: true + "@rollup/rollup-linux-arm64-gnu": + optional: true + "@rollup/rollup-linux-arm64-musl": + optional: true + "@rollup/rollup-linux-powerpc64le-gnu": + optional: true + "@rollup/rollup-linux-riscv64-gnu": + optional: true + "@rollup/rollup-linux-s390x-gnu": + optional: true + "@rollup/rollup-linux-x64-gnu": + optional: true + "@rollup/rollup-linux-x64-musl": + optional: true + "@rollup/rollup-win32-arm64-msvc": + optional: true + "@rollup/rollup-win32-ia32-msvc": + optional: true + "@rollup/rollup-win32-x64-msvc": + optional: true + fsevents: + optional: true + bin: + rollup: dist/bin/rollup + checksum: 291dce8f180628a73d6749119a3e50aa917c416075302bc6f6ac655affc7f0ce9d7f025bef7318d424d0c5623dcb83e360f9ea0125273b6a2285c232172800cc + languageName: node + linkType: hard + "run-async@npm:^2.4.0": version: 2.4.1 resolution: "run-async@npm:2.4.1" @@ -16900,6 +17926,13 @@ __metadata: languageName: node linkType: hard +"siginfo@npm:^2.0.0": + version: 2.0.0 + resolution: "siginfo@npm:2.0.0" + checksum: e93ff66c6531a079af8fb217240df01f980155b5dc408d2d7bebc398dd284e383eb318153bf8acd4db3c4fe799aa5b9a641e38b0ba3b1975700b1c89547ea4e7 + languageName: node + linkType: hard + "signal-exit@npm:^3.0.2, signal-exit@npm:^3.0.3, signal-exit@npm:^3.0.7": version: 3.0.7 resolution: "signal-exit@npm:3.0.7" @@ -17113,6 +18146,13 @@ __metadata: languageName: node linkType: hard +"source-map-js@npm:^1.2.0, source-map-js@npm:^1.2.1": + version: 1.2.1 + resolution: "source-map-js@npm:1.2.1" + checksum: ff9d8c8bf096d534a5b7707e0382ef827b4dd360a577d3f34d2b9f48e12c9d230b5747974ee7c607f0df65113732711bb701fe9ece3c7edbd43cb2294d707df3 + languageName: node + linkType: hard + "source-map-support@npm:0.5.13": version: 0.5.13 resolution: "source-map-support@npm:0.5.13" @@ -17229,6 +18269,13 @@ __metadata: languageName: node linkType: hard +"stackback@npm:0.0.2": + version: 0.0.2 + resolution: "stackback@npm:0.0.2" + checksum: 2d4dc4e64e2db796de4a3c856d5943daccdfa3dd092e452a1ce059c81e9a9c29e0b9badba91b43ef0d5ff5c04ee62feb3bcc559a804e16faf447bac2d883aa99 + languageName: node + linkType: hard + "statuses@npm:2.0.1": version: 2.0.1 resolution: "statuses@npm:2.0.1" @@ -17236,6 +18283,13 @@ __metadata: languageName: node linkType: hard +"std-env@npm:^3.7.0": + version: 3.7.0 + resolution: "std-env@npm:3.7.0" + checksum: 6ee0cca1add3fd84656b0002cfbc5bfa20340389d9ba4720569840f1caa34bce74322aef4c93f046391583e50649d0cf81a5f8fe1d411e50b659571690a45f12 + languageName: node + linkType: hard + "stoppable@npm:^1.1.0": version: 1.1.0 resolution: "stoppable@npm:1.1.0" @@ -17730,6 +18784,17 @@ __metadata: languageName: node linkType: hard +"test-exclude@npm:^7.0.1": + version: 7.0.1 + resolution: "test-exclude@npm:7.0.1" + dependencies: + "@istanbuljs/schema": "npm:^0.1.2" + glob: "npm:^10.4.1" + minimatch: "npm:^9.0.4" + checksum: e6f6f4e1df2e7810e082e8d7dfc53be51a931e6e87925f5e1c2ef92cc1165246ba3bf2dae6b5d86251c16925683dba906bd41e40169ebc77120a2d1b5a0dbbe0 + languageName: node + linkType: hard + "testrpc@npm:0.0.1": version: 0.0.1 resolution: "testrpc@npm:0.0.1" @@ -17772,6 +18837,41 @@ __metadata: languageName: node linkType: hard +"tinybench@npm:^2.9.0": + version: 2.9.0 + resolution: "tinybench@npm:2.9.0" + checksum: cfa1e1418e91289219501703c4693c70708c91ffb7f040fd318d24aef419fb5a43e0c0160df9471499191968b2451d8da7f8087b08c3133c251c40d24aced06c + languageName: node + linkType: hard + +"tinyexec@npm:^0.3.0": + version: 0.3.0 + resolution: "tinyexec@npm:0.3.0" + checksum: 317cc536d091ce7e50271287798d91ef53c4dc80088844d890752a2c7387d213004cba83e5e1d9129390ced617625e34f4a8f0ba5779e31c9b6939f9be0d3543 + languageName: node + linkType: hard + +"tinypool@npm:^1.0.0": + version: 1.0.1 + resolution: "tinypool@npm:1.0.1" + checksum: eaceb93784b8e27e60c0e3e2c7d11c29e1e79b2a025b2c232215db73b90fe22bd4753ad53fc8e801c2b5a63b94a823af549555d8361272bc98271de7dd4a9925 + languageName: node + linkType: hard + +"tinyrainbow@npm:^1.2.0": + version: 1.2.0 + resolution: "tinyrainbow@npm:1.2.0" + checksum: 2924444db6804355e5ba2b6e586c7f77329d93abdd7257a069a0f4530dff9f16de484e80479094e3f39273462541b003a65ee3a6afc2d12555aa745132deba5d + languageName: node + linkType: hard + +"tinyspy@npm:^3.0.0": + version: 3.0.2 + resolution: "tinyspy@npm:3.0.2" + checksum: 5db671b2ff5cd309de650c8c4761ca945459d7204afb1776db9a04fb4efa28a75f08517a8620c01ee32a577748802231ad92f7d5b194dc003ee7f987a2a06337 + languageName: node + linkType: hard + "title-case@npm:^2.1.0": version: 2.1.1 resolution: "title-case@npm:2.1.1" @@ -18664,6 +19764,28 @@ __metadata: languageName: node linkType: hard +"viem@npm:^2.21.14": + version: 2.21.14 + resolution: "viem@npm:2.21.14" + dependencies: + "@adraffy/ens-normalize": "npm:1.10.0" + "@noble/curves": "npm:1.4.0" + "@noble/hashes": "npm:1.4.0" + "@scure/bip32": "npm:1.4.0" + "@scure/bip39": "npm:1.4.0" + abitype: "npm:1.0.5" + isows: "npm:1.0.4" + webauthn-p256: "npm:0.0.5" + ws: "npm:8.17.1" + peerDependencies: + typescript: ">=5.0.4" + peerDependenciesMeta: + typescript: + optional: true + checksum: 0de5a87604ff8397ab12da3a05212b999cb86fc9d7ac601ae3c49a0ed039246299e401dbdb0b41b4bbb4006b2bff8a358ec2f44d01268f625666a6ad159e0514 + languageName: node + linkType: hard + "viem@npm:~1.5.4": version: 1.5.4 resolution: "viem@npm:1.5.4" @@ -18687,6 +19809,112 @@ __metadata: languageName: node linkType: hard +"vite-node@npm:2.1.2": + version: 2.1.2 + resolution: "vite-node@npm:2.1.2" + dependencies: + cac: "npm:^6.7.14" + debug: "npm:^4.3.6" + pathe: "npm:^1.1.2" + vite: "npm:^5.0.0" + bin: + vite-node: vite-node.mjs + checksum: 582843800ee968e7edf2cf6e6f1573634122cba74e47ef531a373337f6084c4a394c3c1c2abb210c178c8671200530412c09f5cc2f02a4519f0045a03c3eed02 + languageName: node + linkType: hard + +"vite@npm:^5.0.0": + version: 5.4.8 + resolution: "vite@npm:5.4.8" + dependencies: + esbuild: "npm:^0.21.3" + fsevents: "npm:~2.3.3" + postcss: "npm:^8.4.43" + rollup: "npm:^4.20.0" + peerDependencies: + "@types/node": ^18.0.0 || >=20.0.0 + less: "*" + lightningcss: ^1.21.0 + sass: "*" + sass-embedded: "*" + stylus: "*" + sugarss: "*" + terser: ^5.4.0 + dependenciesMeta: + fsevents: + optional: true + peerDependenciesMeta: + "@types/node": + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + bin: + vite: bin/vite.js + checksum: 17fdffa558abaf854f04ead7d3ddd76e4556a59871f9ac63cca3fc20a79979984837d8dddaae4b171e3d73061f781e4eec0f6d3babdbce2b4d111d29cf474c1c + languageName: node + linkType: hard + +"vitest@npm:^2.1.2": + version: 2.1.2 + resolution: "vitest@npm:2.1.2" + dependencies: + "@vitest/expect": "npm:2.1.2" + "@vitest/mocker": "npm:2.1.2" + "@vitest/pretty-format": "npm:^2.1.2" + "@vitest/runner": "npm:2.1.2" + "@vitest/snapshot": "npm:2.1.2" + "@vitest/spy": "npm:2.1.2" + "@vitest/utils": "npm:2.1.2" + chai: "npm:^5.1.1" + debug: "npm:^4.3.6" + magic-string: "npm:^0.30.11" + pathe: "npm:^1.1.2" + std-env: "npm:^3.7.0" + tinybench: "npm:^2.9.0" + tinyexec: "npm:^0.3.0" + tinypool: "npm:^1.0.0" + tinyrainbow: "npm:^1.2.0" + vite: "npm:^5.0.0" + vite-node: "npm:2.1.2" + why-is-node-running: "npm:^2.3.0" + peerDependencies: + "@edge-runtime/vm": "*" + "@types/node": ^18.0.0 || >=20.0.0 + "@vitest/browser": 2.1.2 + "@vitest/ui": 2.1.2 + happy-dom: "*" + jsdom: "*" + peerDependenciesMeta: + "@edge-runtime/vm": + optional: true + "@types/node": + optional: true + "@vitest/browser": + optional: true + "@vitest/ui": + optional: true + happy-dom: + optional: true + jsdom: + optional: true + bin: + vitest: vitest.mjs + checksum: 3a331a10499f5ed678530594903869e37a0de548598bcf540db9a6e015bb7a38f36c3585376b3aeeb53fee6b20d75b93081f32b1ea09fd8c2098aa541af28491 + languageName: node + linkType: hard + "vscode-oniguruma@npm:^1.7.0": version: 1.7.0 resolution: "vscode-oniguruma@npm:1.7.0" @@ -19223,6 +20451,16 @@ __metadata: languageName: node linkType: hard +"webauthn-p256@npm:0.0.5": + version: 0.0.5 + resolution: "webauthn-p256@npm:0.0.5" + dependencies: + "@noble/curves": "npm:^1.4.0" + "@noble/hashes": "npm:^1.4.0" + checksum: 6bf5d1857dfb99ecb3b318af06eddea874c10135e6ebb9f046270f5cbb162933bc6caf77aedb033e14c09971dda544a5fb367ac545e4ec8001b309ba517555cf + languageName: node + linkType: hard + "webidl-conversions@npm:^3.0.0": version: 3.0.1 resolution: "webidl-conversions@npm:3.0.1" @@ -19351,6 +20589,18 @@ __metadata: languageName: node linkType: hard +"why-is-node-running@npm:^2.3.0": + version: 2.3.0 + resolution: "why-is-node-running@npm:2.3.0" + dependencies: + siginfo: "npm:^2.0.0" + stackback: "npm:0.0.2" + bin: + why-is-node-running: cli.js + checksum: 0de6e6cd8f2f94a8b5ca44e84cf1751eadcac3ebedcdc6e5fbbe6c8011904afcbc1a2777c53496ec02ced7b81f2e7eda61e76bf8262a8bc3ceaa1f6040508051 + languageName: node + linkType: hard + "wide-align@npm:^1.1.5": version: 1.1.5 resolution: "wide-align@npm:1.1.5" @@ -19496,6 +20746,21 @@ __metadata: languageName: node linkType: hard +"ws@npm:8.17.1": + version: 8.17.1 + resolution: "ws@npm:8.17.1" + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ">=5.0.2" + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: 4264ae92c0b3e59c7e309001e93079b26937aab181835fb7af79f906b22cd33b6196d96556dafb4e985742dd401e99139572242e9847661fdbc96556b9e6902d + languageName: node + linkType: hard + "ws@npm:8.2.3": version: 8.2.3 resolution: "ws@npm:8.2.3" From 576f90269d265e7a205e119a93fc69c629e95440 Mon Sep 17 00:00:00 2001 From: Nicolas Brugneaux Date: Tue, 8 Oct 2024 15:55:06 +0200 Subject: [PATCH 08/54] chore: enter beta (#385) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Enter beta mode --- ## PR-Codex overview This PR introduces a new configuration file, `.changeset/pre.json`, which defines the pre-release mode and specifies version information for various `@celo` packages. ### Detailed summary - Added `.changeset/pre.json` file. - Set `mode` to `"pre"` and `tag` to `"beta"`. - Defined `initialVersions` for multiple `@celo` packages with specified version numbers. - Included an empty `changesets` array. > ✨ Ask PR-Codex anything about this PR by commenting with `/codex {your question}` --- .changeset/pre.json | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 .changeset/pre.json diff --git a/.changeset/pre.json b/.changeset/pre.json new file mode 100644 index 000000000..15e1e3198 --- /dev/null +++ b/.changeset/pre.json @@ -0,0 +1,31 @@ +{ + "mode": "pre", + "tag": "beta", + "initialVersions": { + "@celo/celocli": "5.2.1", + "@celo/dev-utils": "0.0.5", + "@celo/base": "6.1.0", + "@celo/connect": "6.0.2", + "@celo/contractkit": "8.3.0", + "@celo/cryptographic-utils": "5.1.0", + "@celo/explorer": "5.0.12", + "@celo/governance": "5.1.3", + "@celo/keystores": "5.0.11", + "@celo/metadata-claims": "0.0.1", + "@celo/network-utils": "5.0.6", + "@celo/phone-utils": "6.0.3", + "@celo/transactions-uri": "5.0.11", + "@celo/utils": "7.0.0", + "@celo/wallet-base": "6.0.1", + "@celo/wallet-hsm": "6.0.1", + "@celo/wallet-hsm-aws": "6.0.1", + "@celo/wallet-hsm-azure": "6.0.1", + "@celo/wallet-hsm-gcp": "6.0.1", + "@celo/wallet-ledger": "6.0.1", + "@celo/wallet-local": "6.0.1", + "@celo/wallet-remote": "6.0.1", + "@celo/typescript": "0.0.1", + "@celo/viem-account-ledger": "0.0.1" + }, + "changesets": [] +} From 5a0a922f4965336849b33d5f90234766db55b2e5 Mon Sep 17 00:00:00 2001 From: Aaron DeRuvo Date: Fri, 11 Oct 2024 12:57:24 +0200 Subject: [PATCH 09/54] Derivation Warnings (#389) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ### Description Add warnings about the derivation path default changing in the future. as per https://forum.celo.org/t/deprecating-the-celo-derivation-path/9229 ### Other changes add derivationPath to the output ### Tested yes new `account:new` tests https://app.warp.dev/block/bYdy5uQ3WsAUT7rj1bT19l ### Related issues Prework for #352 ### Backwards compatibility yes unless you count the output of the command which we do not as it is designed for humans to read. ### Documentation improved! --- ## PR-Codex overview This PR focuses on updates to the `@celo/celocli` and `@celo/cryptographic-utils` packages, including the addition of a warning about the new default ETH derivation path, improvements to the `NewAccount` command, and modifications to key generation functions. ### Detailed summary - `@celo/celocli`: Allow `account:new` command to run without a node. - Added warning about default ETH derivation path in future versions. - Updated `generateKeys`, `generateSeed`, and related functions with parameter documentation. - Adjusted `NewAccount` command to reflect new derivation path logic. - Updated test cases to verify new behavior with derivation paths. > ✨ Ask PR-Codex anything about this PR by commenting with `/codex {your question}` --- .changeset/fifty-roses-explain.md | 6 + .changeset/polite-pets-push.md | 5 + docs/command-line-interface/account.md | 3 + .../cryptographic-utils/modules/account.md | 10 +- packages/cli/src/commands/account/new.test.ts | 145 ++++++++++++++++++ packages/cli/src/commands/account/new.ts | 33 +++- packages/sdk/CHANGELOG.md | 2 +- .../sdk/cryptographic-utils/src/account.ts | 27 +++- 8 files changed, 212 insertions(+), 19 deletions(-) create mode 100644 .changeset/fifty-roses-explain.md create mode 100644 .changeset/polite-pets-push.md create mode 100644 packages/cli/src/commands/account/new.test.ts diff --git a/.changeset/fifty-roses-explain.md b/.changeset/fifty-roses-explain.md new file mode 100644 index 000000000..9376ae647 --- /dev/null +++ b/.changeset/fifty-roses-explain.md @@ -0,0 +1,6 @@ +--- +'@celo/cryptographic-utils': patch +'@celo/celocli': patch +--- + +Add warning that ETH derivation path will be the default in a future major breaking change. diff --git a/.changeset/polite-pets-push.md b/.changeset/polite-pets-push.md new file mode 100644 index 000000000..c47cea168 --- /dev/null +++ b/.changeset/polite-pets-push.md @@ -0,0 +1,5 @@ +--- +'@celo/celocli': patch +--- + +Fix: account:new can now be called without a node diff --git a/docs/command-line-interface/account.md b/docs/command-line-interface/account.md index 83f395b15..7692c5689 100644 --- a/docs/command-line-interface/account.md +++ b/docs/command-line-interface/account.md @@ -642,6 +642,9 @@ DESCRIPTION command has been tested swapping mnemonics with the Ledger successfully (only supports english) + WARN: In 7.0 the default derivation path will be Eth ("m/44'/60'/0'") + forum.celo.org/t/deprecating-the-celo-derivation-path/9229 + EXAMPLES new diff --git a/docs/sdk/cryptographic-utils/modules/account.md b/docs/sdk/cryptographic-utils/modules/account.md index 5932c0726..c3dd0a652 100644 --- a/docs/sdk/cryptographic-utils/modules/account.md +++ b/docs/sdk/cryptographic-utils/modules/account.md @@ -86,7 +86,7 @@ base/lib/account.d.ts:18 #### Defined in -[cryptographic-utils/src/account.ts:455](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/cryptographic-utils/src/account.ts#L455) +[cryptographic-utils/src/account.ts:468](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/cryptographic-utils/src/account.ts#L468) ___ @@ -179,7 +179,7 @@ ___ #### Defined in -[cryptographic-utils/src/account.ts:403](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/cryptographic-utils/src/account.ts#L403) +[cryptographic-utils/src/account.ts:410](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/cryptographic-utils/src/account.ts#L410) ___ @@ -204,7 +204,7 @@ ___ #### Defined in -[cryptographic-utils/src/account.ts:390](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/cryptographic-utils/src/account.ts#L390) +[cryptographic-utils/src/account.ts:397](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/cryptographic-utils/src/account.ts#L397) ___ @@ -233,7 +233,7 @@ ___ #### Defined in -[cryptographic-utils/src/account.ts:431](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/cryptographic-utils/src/account.ts#L431) +[cryptographic-utils/src/account.ts:444](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/cryptographic-utils/src/account.ts#L444) ___ @@ -278,7 +278,7 @@ ___ #### Defined in -[cryptographic-utils/src/account.ts:416](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/cryptographic-utils/src/account.ts#L416) +[cryptographic-utils/src/account.ts:423](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/cryptographic-utils/src/account.ts#L423) ___ diff --git a/packages/cli/src/commands/account/new.test.ts b/packages/cli/src/commands/account/new.test.ts new file mode 100644 index 000000000..f5cb9bf5b --- /dev/null +++ b/packages/cli/src/commands/account/new.test.ts @@ -0,0 +1,145 @@ +import { testWithAnvilL2 } from '@celo/dev-utils/lib/anvil-test' +import fs from 'node:fs' +import path from 'node:path' +import Web3 from 'web3' +import { + stripAnsiCodesAndTxHashes, + stripAnsiCodesFromNestedArray, + testLocallyWithWeb3Node, +} from '../../test-utils/cliUtils' +import NewAccount from './new' + +process.env.NO_SYNCCHECK = 'true' + +testWithAnvilL2('account:set-name cmd', (web3: Web3) => { + const writeMock = jest.spyOn(NewAccount.prototype, 'log') + const consoleMock = jest.spyOn(console, 'log') + + beforeEach(() => { + writeMock.mockClear() + consoleMock.mockClear() + }) + it('generates mnemonic and lets people know which derivation path is being used when called with no flags', async () => { + await testLocallyWithWeb3Node(NewAccount, [], web3) + + expect(stripAnsiCodesFromNestedArray(writeMock.mock.calls)).toMatchInlineSnapshot(` + [ + [ + " + Using celo-legacy path (m/44'/52752'/0') for derivation. This will be switched to eth derivation path (m/44'/60'/0') next major version. + ", + ], + [ + " + This is not being stored anywhere. Save the mnemonic somewhere to use this account at a later point. + ", + ], + ] + `) + + expect(deRandomize(consoleMock.mock.lastCall?.[0])).toMatchInlineSnapshot(` + "mnemonic: *** *** + derivationPath: m/44'/52752'/0' + accountAddress: ADDRESS + privateKey: PUBLIC_KEY + publicKey: PRIVATE_KEY + address: ADDRESS" + `) + }) + it("when called with --derivationPath eth flag generates mnemonic using m/44'/60'/0'", async () => { + await testLocallyWithWeb3Node(NewAccount, ['--derivationPath', 'eth'], web3) + + expect(deRandomize(consoleMock.mock.lastCall?.[0])).toMatchInlineSnapshot(` + "mnemonic: *** *** + derivationPath: m/44'/60'/0' + accountAddress: ADDRESS + privateKey: PUBLIC_KEY + publicKey: PRIVATE_KEY + address: ADDRESS" + `) + }) + + describe('when called with --mnemonicPath', () => { + const MNEMONIC_PATH = path.join(__dirname, 'public_mnemonic') + const TEST_mnemonic = + 'hamster label near volume denial spawn stable orbit trade only crawl learn forest fire test feel bubble found angle also olympic obscure fork venue' + beforeEach(() => { + fs.writeFileSync(MNEMONIC_PATH, TEST_mnemonic, { + flag: 'w', + }) + }) + afterEach(async () => { + fs.rmSync(MNEMONIC_PATH) + }) + + it('generates using celo derivation path', async () => { + await testLocallyWithWeb3Node(NewAccount, [`--mnemonicPath`, MNEMONIC_PATH], web3) + + expect(stripAnsiCodesAndTxHashes(consoleMock.mock.lastCall?.[0])).toMatchInlineSnapshot(` + "mnemonic: hamster label near volume denial spawn stable orbit trade only crawl learn forest fire test feel bubble found angle also olympic obscure fork venue + derivationPath: m/44'/52752'/0' + accountAddress: 0x0a85BeCD036C86faD4Db5519634904be2021fb7d + privateKey: 6346d0cd7cfdb7904f08df48e442169d3333643de0351682f8b79cf714395471 + publicKey: 02269b3efc9c4c6b81037d06e73e936078e625fb0f12b9ea1e0fd14d2cd45775f2 + address: 0x0a85BeCD036C86faD4Db5519634904be2021fb7d" + `) + }) + + it("and --derivationPath m/44'/60'/0' generates using eth derivation path", async () => { + await testLocallyWithWeb3Node( + NewAccount, + [`--mnemonicPath`, MNEMONIC_PATH, '--derivationPath', "m/44'/60'/0'"], + web3 + ) + + expect(stripAnsiCodesAndTxHashes(consoleMock.mock.lastCall?.[0])).toMatchInlineSnapshot(` + "mnemonic: hamster label near volume denial spawn stable orbit trade only crawl learn forest fire test feel bubble found angle also olympic obscure fork venue + derivationPath: m/44'/60'/0' + accountAddress: 0x35A4d54B541fc7b2047fb5357cC706191E105cd3 + privateKey: e4816cbb93346760921264ea38a7fc54903f4dd688ae0923fefd89a43c5f58cc + publicKey: 034b3036d657a6dc2f322db52cca29ae72101a9cf56de4765d17b0507ea1e87b7c + address: 0x35A4d54B541fc7b2047fb5357cC706191E105cd3" + `) + }) + it("and --derivationPath m/44'/60'/0' and --changeIndex generates using eth derivation path", async () => { + await testLocallyWithWeb3Node( + NewAccount, + [`--mnemonicPath`, MNEMONIC_PATH, '--derivationPath', 'eth', '--changeIndex', '2'], + web3 + ) + + expect(stripAnsiCodesAndTxHashes(consoleMock.mock.lastCall?.[0])).toMatchInlineSnapshot(` + "mnemonic: hamster label near volume denial spawn stable orbit trade only crawl learn forest fire test feel bubble found angle also olympic obscure fork venue + derivationPath: m/44'/60'/0' + accountAddress: 0xb3492799c55141e0B3507302F241f1c34c08E1e2 + privateKey: 3abc861ef3e9e31a6a7dc23e5903e41b3fe4a381d4fbb8f9db14e6730abd1c43 + publicKey: 0280df4d09cf8ebcad418327287be3f4ba0054112544ffa290ab3cc0a87949b32a + address: 0xb3492799c55141e0B3507302F241f1c34c08E1e2" + `) + }) + it('and --derivationPath eth and --addressIndex generates using eth derivation path', async () => { + await testLocallyWithWeb3Node( + NewAccount, + [`--mnemonicPath`, MNEMONIC_PATH, '--derivationPath', 'eth', '--addressIndex', '3'], + web3 + ) + + expect(stripAnsiCodesAndTxHashes(consoleMock.mock.lastCall?.[0])).toMatchInlineSnapshot(` + "mnemonic: hamster label near volume denial spawn stable orbit trade only crawl learn forest fire test feel bubble found angle also olympic obscure fork venue + derivationPath: m/44'/60'/0' + accountAddress: 0x336E523118B6091e033F9715257e2E793002964c + privateKey: aa324b2efd0ebe6387c3bcf03387c78047d82a1d2e8b4e132e9e1b9fb93529d0 + publicKey: 0394cc7cc524079c545aef2067c9ea7e69decb4815004afecf215ea1e6f370ce6c + address: 0x336E523118B6091e033F9715257e2E793002964c" + `) + }) + }) +}) + +function deRandomize(rawOutput: string) { + return stripAnsiCodesAndTxHashes(rawOutput) + .replace(/0x[A-Fa-f0-9]{40}/g, 'ADDRESS') + .replace(/ [A-Fa-f0-9]{66}/g, ' PRIVATE_KEY') + .replace(/ [A-Fa-f0-9]{64}/g, ' PUBLIC_KEY') + .replace(/mnemonic: ([a-z]+\s)+/, 'mnemonic: *** *** \n') +} diff --git a/packages/cli/src/commands/account/new.ts b/packages/cli/src/commands/account/new.ts index 312c504f4..9ab1cb627 100644 --- a/packages/cli/src/commands/account/new.ts +++ b/packages/cli/src/commands/account/new.ts @@ -1,4 +1,5 @@ import { + CELO_DERIVATION_PATH_BASE, generateKeys, generateMnemonic, MnemonicLanguages, @@ -9,6 +10,7 @@ import { import { privateKeyToAddress } from '@celo/utils/lib/address' import { toChecksumAddress } from '@ethereumjs/util' import { Flags } from '@oclif/core' +import chalk from 'chalk' import * as fs from 'fs-extra' import { BaseCommand } from '../../base' import { printValueMap } from '../../utils/cli' @@ -17,7 +19,8 @@ const ETHEREUM_DERIVATION_PATH = "m/44'/60'/0'" export default class NewAccount extends BaseCommand { static description = - "Creates a new account locally using the Celo Derivation Path (m/44'/52752'/0/changeIndex/addressIndex) and print out the key information. Save this information for local transaction signing or import into a Celo node. Ledger: this command has been tested swapping mnemonics with the Ledger successfully (only supports english)" + "Creates a new account locally using the Celo Derivation Path (m/44'/52752'/0/changeIndex/addressIndex) and print out the key information. Save this information for local transaction signing or import into a Celo node. Ledger: this command has been tested swapping mnemonics with the Ledger successfully (only supports english)" + + "\n\nWARN: In 7.0 the default derivation path will be Eth (\"m/44'/60'/0'\") forum.celo.org/t/deprecating-the-celo-derivation-path/9229" static flags = { ...BaseCommand.flags, @@ -66,9 +69,13 @@ export default class NewAccount extends BaseCommand { 'new --passphrasePath some_folder/my_passphrase_file --mnemonicPath some_folder/my_mnemonic_file --addressIndex 5', ] + async init() { + // Dont call super class init because this command does not need to connect to a node + } + static languageOptions(language: string): MnemonicLanguages | undefined { if (language) { - // @ts-ignore + // @ts-expect-error const enumLanguage = MnemonicLanguages[language] return enumLanguage as MnemonicLanguages } @@ -79,7 +86,7 @@ export default class NewAccount extends BaseCommand { if (derivationPath) { derivationPath = derivationPath.endsWith('/') ? derivationPath.slice(0, -1) : derivationPath } - return derivationPath !== 'eth' ? derivationPath : ETHEREUM_DERIVATION_PATH + return derivationPath === 'eth' ? ETHEREUM_DERIVATION_PATH : derivationPath } static readFile(file?: string): string | undefined { @@ -111,7 +118,9 @@ export default class NewAccount extends BaseCommand { NewAccount.languageOptions(res.flags.language!) ) } - const derivationPath = NewAccount.sanitizeDerivationPath(res.flags.derivationPath) + const derivationPath = NewAccount.sanitizeDerivationPath( + res.flags.derivationPath ?? CELO_DERIVATION_PATH_BASE + ) const passphrase = NewAccount.readFile(res.flags.passphrasePath) const keys = await generateKeys( mnemonic, @@ -122,9 +131,21 @@ export default class NewAccount extends BaseCommand { derivationPath ) const accountAddress = toChecksumAddress(privateKeyToAddress(keys.privateKey)) + + if (derivationPath === CELO_DERIVATION_PATH_BASE) { + this.log( + chalk.magenta( + `\nUsing celo-legacy path (${CELO_DERIVATION_PATH_BASE}) for derivation. This will be switched to eth derivation path (${ETHEREUM_DERIVATION_PATH}) next major version.\n` + ) + ) + } + + printValueMap({ mnemonic, derivationPath, accountAddress, ...keys }) + this.log( - 'This is not being stored anywhere. Save the mnemonic somewhere to use this account at a later point.\n' + chalk.green.bold( + '\nThis is not being stored anywhere. Save the mnemonic somewhere to use this account at a later point.\n' + ) ) - printValueMap({ mnemonic, accountAddress, ...keys }) } } diff --git a/packages/sdk/CHANGELOG.md b/packages/sdk/CHANGELOG.md index a1a695d8d..676228e6f 100644 --- a/packages/sdk/CHANGELOG.md +++ b/packages/sdk/CHANGELOG.md @@ -35,7 +35,7 @@ for detail info see [#9127](https://github.com/celo-org/celo-monorepo/pull/9127) - Removes phone and country related functions from utils. Now in [phone-utils](https://github.com/celo-org/celo-monorepo/pull/8987) - - comment encryption, bls and mneumonic functions moved to @celo/cryptographic-utils + - comment encryption, bls and mnemonic functions moved to @celo/cryptographic-utils Features diff --git a/packages/sdk/cryptographic-utils/src/account.ts b/packages/sdk/cryptographic-utils/src/account.ts index 7f8b99dc4..ce150657d 100644 --- a/packages/sdk/cryptographic-utils/src/account.ts +++ b/packages/sdk/cryptographic-utils/src/account.ts @@ -68,7 +68,7 @@ export async function generateMnemonic( export function validateMnemonic( mnemonic: string, - bip39ToUse = bip39Wrapper, + bip39ToUse: Bip39 = bip39Wrapper, language?: MnemonicLanguages ) { if (language !== undefined) { @@ -386,13 +386,20 @@ function wordSuggestions(typo: string, language: MnemonicLanguages): Suggestions return map }, new Map()) } - +/* + * @param mnemonic 12 or 12 BIP39 words + * @param password + * @param changeIndex postion 4 from https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki + * @param addressIndex postion 5 from https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki + * bip39ToUse - bip39 library + * @param derivationPath - This will default to ETH_DERIVATION_PATH in 7.0 forum.celo.org/t/deprecating-the-celo-derivation-path/9229 + */ export async function generateKeys( mnemonic: string, password?: string, changeIndex: number = 0, addressIndex: number = 0, - bip39ToUse = bip39Wrapper, + bip39ToUse: Bip39 = bip39Wrapper, derivationPath: string = CELO_DERIVATION_PATH_BASE ): Promise<{ privateKey: string; publicKey: string; address: string }> { const seed: Buffer = await generateSeed(mnemonic, password, bip39ToUse) @@ -410,13 +417,13 @@ export function generateDeterministicInviteCode( const seed = Buffer.from(keccak_256(utf8ToBytes(recipientPhoneHash + recipientPepper))) return generateKeysFromSeed(seed, changeIndex, addressIndex, derivationPath) } - -// keyByteLength truncates the seed. *Avoid its use* -// It was added only because a backwards compatibility bug +/* + * @param keyByteLength truncates the seed. *Avoid its use* It was added only because a backwards compatibility bug + */ export async function generateSeed( mnemonic: string, password?: string, - bip39ToUse = bip39Wrapper, + bip39ToUse: Bip39 = bip39Wrapper, keyByteLength: number = 64 ): Promise { let seed = Buffer.from(await bip39ToUse.mnemonicToSeed(mnemonic, password)) @@ -428,6 +435,12 @@ export async function generateSeed( return seed } +/* + * @param seed - Buffer created from mnemonic + * @param changeIndex postion 4 from https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki + * @param addressIndex postion 5 from https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki + * @param derivationPath - This will default to ETH_DERIVATION_PATH in 7.0 forum.celo.org/t/deprecating-the-celo-derivation-path/9229 + */ export function generateKeysFromSeed( seed: Buffer, changeIndex: number = 0, From 693f6e7d2fe3034b6d7a3bc4a9719e76229d1981 Mon Sep 17 00:00:00 2001 From: Aaron DeRuvo Date: Mon, 14 Oct 2024 13:23:44 +0200 Subject: [PATCH 10/54] Fixing Ledger 1.1.10 interacting with whitelisted fee token contracts (#395) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit There was a bug where ledgers would return a INVALID DATA error when trying to transfer or interactive with a contract of one of the whitelisted gas fee tokens. or using a gas token to pay for gas. This occured while checking if the token was known in order to display human readble data while confirming on the ledger. The legacy 1.1.10 version of ledger app uses an older blob of signed data. it seems in this case the encoded data should NOT be prefixed by 0x. while in the newer it should be. this was not obvious and as automated tests are difficult when interacting with hw devices was missed. turned off test for cip66. Possibly we will remove later. ## related Issues fixes #394 fixes #353 --- ## PR-Codex overview This PR focuses on fixing issues related to token transfers and gas currency handling in the `celo` ecosystem, particularly with the `@celo/celocli` and `@celo/wallet-ledger` packages. It also improves error messages and adds a new method for providing token information. ### Detailed summary - Updated error messages in `packages/cli/src/transfer-stable-base.ts` for clarity on transfer affordability. - Fixed token information handling in `packages/sdk/wallets/wallet-ledger/src/ledger-signer.ts`. - Added `provideERC20TokenInformation` method to `LedgerSigner`. - Improved tests in `packages/sdk/wallets/wallet-ledger/src/ledger-wallet.test.ts` with mock implementations and inline snapshots. - Updated test suite to skip certain tests related to `cip66`. > ✨ Ask PR-Codex anything about this PR by commenting with `/codex {your question}` --- .changeset/fair-points-beg.md | 5 +++ .changeset/hungry-cups-juggle.md | 5 +++ .changeset/many-cobras-live.md | 5 +++ .gitignore | 1 + packages/cli/src/transfer-stable-base.ts | 6 ++-- .../wallet-ledger/src/ledger-signer.ts | 17 ++++++++-- .../wallet-ledger/src/ledger-wallet.test.ts | 32 +++++++++++++++++-- 7 files changed, 65 insertions(+), 6 deletions(-) create mode 100644 .changeset/fair-points-beg.md create mode 100644 .changeset/hungry-cups-juggle.md create mode 100644 .changeset/many-cobras-live.md diff --git a/.changeset/fair-points-beg.md b/.changeset/fair-points-beg.md new file mode 100644 index 000000000..b55157c54 --- /dev/null +++ b/.changeset/fair-points-beg.md @@ -0,0 +1,5 @@ +--- +'@celo/wallet-ledger': patch +--- + +Fix issue where ledger running celo firmware app 1.1.10 could not send fee token transactions or perform and interactions with those contracts diff --git a/.changeset/hungry-cups-juggle.md b/.changeset/hungry-cups-juggle.md new file mode 100644 index 000000000..7ea711cda --- /dev/null +++ b/.changeset/hungry-cups-juggle.md @@ -0,0 +1,5 @@ +--- +'@celo/celocli': patch +--- + +Fix incorrect message where the transfered token was used as gas token in the messaging but not in actuality diff --git a/.changeset/many-cobras-live.md b/.changeset/many-cobras-live.md new file mode 100644 index 000000000..4f6b73042 --- /dev/null +++ b/.changeset/many-cobras-live.md @@ -0,0 +1,5 @@ +--- +'@celo/celocli': patch +--- + +Fix Transfering, exchanging cusd (and other fee tokens) and or using gasCurrency flag with ledger devices prior to 1.2 diff --git a/.gitignore b/.gitignore index 2f0507725..9ea5b7afd 100644 --- a/.gitignore +++ b/.gitignore @@ -92,3 +92,4 @@ package.json-e gha-creds-*.json transactions.json packages/sdk/metadata-claims/lib +packages/cli/key diff --git a/packages/cli/src/transfer-stable-base.ts b/packages/cli/src/transfer-stable-base.ts index ace0ce0da..7002e6e38 100644 --- a/packages/cli/src/transfer-stable-base.ts +++ b/packages/cli/src/transfer-stable-base.ts @@ -79,7 +79,7 @@ export abstract class TransferStableBase extends BaseCommand { .isNotSanctioned(from) .isNotSanctioned(to) .addCheck( - `Account can afford transfer in ${this._stableCurrency} and gas paid in ${ + `Account can afford to transfer ${this._stableCurrency} and gas paid in ${ res.flags.gasCurrency || 'CELO' }`, async () => { @@ -103,7 +103,9 @@ export abstract class TransferStableBase extends BaseCommand { } return valueBalance.gte(value.plus(gasValue)) }, - `Cannot afford transfer with ${this._stableCurrency} gasCurrency; try reducing value slightly or using gasCurrency=CELO` + `Cannot afford to transfer ${this._stableCurrency} ${ + res.flags.gasCurrency ? 'with' + ' ' + res.flags.gasCurrency + ' ' + 'gasCurrency' : '' + }; try reducing value slightly or using a different gasCurrency` ) .runChecks() diff --git a/packages/sdk/wallets/wallet-ledger/src/ledger-signer.ts b/packages/sdk/wallets/wallet-ledger/src/ledger-signer.ts index e656b4764..40e7f2164 100644 --- a/packages/sdk/wallets/wallet-ledger/src/ledger-signer.ts +++ b/packages/sdk/wallets/wallet-ledger/src/ledger-signer.ts @@ -174,7 +174,7 @@ export class LedgerSigner implements Signer { const tokenInfo = getTokenInfo(rlpEncoded.transaction.to!, rlpEncoded.transaction.chainId!) if (tokenInfo) { - await this.ledger!.provideERC20TokenInformation(`0x${tokenInfo.data.toString('hex')}`) + await this.provideERC20TokenInformation(tokenInfo.data) } if (rlpEncoded.transaction.feeCurrency && rlpEncoded.transaction.feeCurrency !== '0x') { const feeTokenInfo = getTokenInfo( @@ -182,7 +182,7 @@ export class LedgerSigner implements Signer { rlpEncoded.transaction.chainId! ) if (feeTokenInfo) { - await this.ledger!.provideERC20TokenInformation(feeTokenInfo.data.toString('hex')) + await this.provideERC20TokenInformation(feeTokenInfo.data) } } } @@ -198,4 +198,17 @@ export class LedgerSigner implements Signer { throw new Error('Not implemented') return Promise.resolve(Buffer.from([])) } + + private provideERC20TokenInformation(tokenInfoData: Buffer) { + // it looks like legacy might need it WITHOUT 0x prefix + const isModern = meetsVersionRequirements(this.appConfiguration.version, { + minimum: LedgerWallet.MIN_VERSION_EIP1559, + }) + + const hexStringTokenInfo = isModern + ? ensureLeading0x(tokenInfoData.toString('hex')) + : trimLeading0x(tokenInfoData.toString('hex')) + + return this.ledger!.provideERC20TokenInformation(hexStringTokenInfo) + } } diff --git a/packages/sdk/wallets/wallet-ledger/src/ledger-wallet.test.ts b/packages/sdk/wallets/wallet-ledger/src/ledger-wallet.test.ts index b70b60c83..cf3bef77f 100644 --- a/packages/sdk/wallets/wallet-ledger/src/ledger-wallet.test.ts +++ b/packages/sdk/wallets/wallet-ledger/src/ledger-wallet.test.ts @@ -700,12 +700,40 @@ describe('LedgerWallet class', () => { test( 'succeeds', async () => { - await expect(wallet.signTransaction(celoTransaction)).resolves.not.toBeUndefined() + jest + .spyOn(wallet.ledger!, 'provideERC20TokenInformation') + .mockImplementationOnce(async () => true) + await expect(wallet.signTransaction(celoTransaction)).resolves + .toMatchInlineSnapshot(` + { + "raw": "0x7bf87f82aef38063636394588e4b68193001e4d10928660ab4165b813717c0880de0b6b3a764000080c094874069fa1eb16d44d622f2e0ca25eea172369bc101a0254f952c5223c30039f7f845778d7aac558464ce2971fd09883df34913eb6dfca037a78571ae1a44d86bac7269e3a845990a49ad5fb60a5ec1fcaba428693558c0", + "tx": { + "accessList": [], + "feeCurrency": "0x874069fa1eb16d44d622f2e0ca25eea172369bc1", + "gas": "0x63", + "hash": "0xdc8347423b5310ed64e46a9abb49cd455e8049f838f93752afd122ae938e53c9", + "input": "0x", + "maxFeePerGas": "0x63", + "maxPriorityFeePerGas": "0x63", + "nonce": "0", + "r": "0x254f952c5223c30039f7f845778d7aac558464ce2971fd09883df34913eb6dfc", + "s": "0x37a78571ae1a44d86bac7269e3a845990a49ad5fb60a5ec1fcaba428693558c0", + "to": "0x588e4b68193001e4d10928660ab4165b813717c0", + "v": "0x01", + "value": "0x0de0b6b3a7640000", + }, + "type": "cip64", + } + `) + + expect(wallet.ledger!.provideERC20TokenInformation).toHaveBeenCalledWith( + `0x06612063555344874069fa1eb16d44d622f2e0ca25eea172369bc1000000120000aef33045022100a885480c357fd6ec64ed532656a7e988198fdf4e2cf4632408f2d65561189872022009fd78725055fc68af16e151516ba29625e3e1c74ceab3da1bcabd6015e3f6e8` + ) }, TEST_TIMEOUT_IN_MS ) }) - describe('[cip66]', () => { + describe.skip('[cip66]', () => { const kit = newKit('https://alfajores-forno.celo-testnet.org') beforeEach(async () => { celoTransaction = { From 4988c401a4f4ed1c547ae0bc015145d4168dd18a Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 14 Oct 2024 13:34:27 +0200 Subject: [PATCH 11/54] Version Packages (beta) (#355) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR was opened by the [Changesets release](https://github.com/changesets/action) GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to master, this PR will be updated. ⚠️⚠️⚠️⚠️⚠️⚠️ `master` is currently in **pre mode** so this branch has prereleases rather than normal releases. If you want to exit prereleases, run `changeset pre exit` on `master`. ⚠️⚠️⚠️⚠️⚠️⚠️ # Releases ## @celo/celocli@6.0.0-beta.0 ### Major Changes - [#339](https://github.com/celo-org/developer-tooling/pull/339) [`87223ba`](https://github.com/celo-org/developer-tooling/commit/87223ba93ab79f43ae6884282d30a420eb09c23c) Thanks [@aaronmgdr](https://github.com/aaronmgdr)! - Remove support for reserve:\* commands. As foretold by - [#343](https://github.com/celo-org/developer-tooling/pull/343) [`54741cc`](https://github.com/celo-org/developer-tooling/commit/54741cc01ef0a6716bdd45a955ac65c7ecced6c1) Thanks [@aaronmgdr](https://github.com/aaronmgdr)! - Remove commands identity:identifier, identity:get-attestations See ### Patch Changes - [#389](https://github.com/celo-org/developer-tooling/pull/389) [`5a0a922`](https://github.com/celo-org/developer-tooling/commit/5a0a922f4965336849b33d5f90234766db55b2e5) Thanks [@aaronmgdr](https://github.com/aaronmgdr)! - Add warning that ETH derivation path will be the default in a future major breaking change. - [#395](https://github.com/celo-org/developer-tooling/pull/395) [`693f6e7`](https://github.com/celo-org/developer-tooling/commit/693f6e7d2fe3034b6d7a3bc4a9719e76229d1981) Thanks [@aaronmgdr](https://github.com/aaronmgdr)! - Fix incorrect message where the transfered token was used as gas token in the messaging but not in actuality - [#395](https://github.com/celo-org/developer-tooling/pull/395) [`693f6e7`](https://github.com/celo-org/developer-tooling/commit/693f6e7d2fe3034b6d7a3bc4a9719e76229d1981) Thanks [@aaronmgdr](https://github.com/aaronmgdr)! - Fix Transfering, exchanging cusd (and other fee tokens) and or using gasCurrency flag with ledger devices prior to 1.2 - [#389](https://github.com/celo-org/developer-tooling/pull/389) [`5a0a922`](https://github.com/celo-org/developer-tooling/commit/5a0a922f4965336849b33d5f90234766db55b2e5) Thanks [@aaronmgdr](https://github.com/aaronmgdr)! - Fix: account:new can now be called without a node - Updated dependencies \[[`693f6e7`](https://github.com/celo-org/developer-tooling/commit/693f6e7d2fe3034b6d7a3bc4a9719e76229d1981), [`5a0a922`](https://github.com/celo-org/developer-tooling/commit/5a0a922f4965336849b33d5f90234766db55b2e5), [`33ad4aa`](https://github.com/celo-org/developer-tooling/commit/33ad4aaf6b9edc33d1ce19833dbea626798cfb88), [`4ef76eb`](https://github.com/celo-org/developer-tooling/commit/4ef76eb174454f60304080d0ef63a859cd8d931b), [`33ad4aa`](https://github.com/celo-org/developer-tooling/commit/33ad4aaf6b9edc33d1ce19833dbea626798cfb88)]: - @celo/wallet-ledger@6.0.2-beta.0 - @celo/cryptographic-utils@5.1.1-beta.0 - @celo/contractkit@9.0.0-beta.0 - @celo/base@7.0.0-beta.0 - @celo/utils@8.0.0-beta.0 - @celo/metadata-claims@1.0.0-beta.0 - @celo/explorer@5.0.13-beta.0 - @celo/governance@5.1.4-beta.0 - @celo/connect@6.0.3-beta.0 - @celo/phone-utils@6.0.4-beta.0 - @celo/wallet-hsm-azure@6.0.2-beta.0 - @celo/wallet-local@6.0.2-beta.0 ## @celo/base@7.0.0-beta.0 ### Major Changes - [#228](https://github.com/celo-org/developer-tooling/pull/228) [`4ef76eb`](https://github.com/celo-org/developer-tooling/commit/4ef76eb174454f60304080d0ef63a859cd8d931b) Thanks [@aaronmgdr](https://github.com/aaronmgdr)! - remove deprecated functions and consts exported from ./contacts and ./displayformating. ./currencies and ./phonenumbers. If these are used by your app we recommend to inline the functions from the previous release. - - - Full List of removed exports -- ContactPhoneNumber, MinimalContact, getContactPhoneNumber, isContact, CURRENCY_ENUM, Currency, CURRENCIES, resolveCurrency, SHORT_CURRENCIES, currencyToShortMap | getErrorMessage | anonymizedPhone | getContactNameHash ## @celo/contractkit@9.0.0-beta.0 ### Major Changes - [#340](https://github.com/celo-org/developer-tooling/pull/340) [`33ad4aa`](https://github.com/celo-org/developer-tooling/commit/33ad4aaf6b9edc33d1ce19833dbea626798cfb88) Thanks [@aaronmgdr](https://github.com/aaronmgdr)! - Removes all exports under the lib/identity folder. These have been move to a new @celo/metadata-claims package and should be imported from there. Note that folder structure is also flattened slightly. so replace `@celo/contractkit/lib/identity/claims/` with `@celo/metadata-claims/lib/` example ```diff - import { createAccountClaim } from '@celo/contractkit/lib/identity/claims/account' + import { createAccountClaim } from '@celo/metadata-claims/lib/account' ``` ```diff - import { ContractKit, IdentityMetadataWrapper, newKitFromWeb3 } from '@celo/contractkit' - import { ClaimTypes } from '@celo/contractkit/lib/identity' + import { ContractKit, newKitFromWeb3 } from '@celo/contractkit' + import { ClaimTypes, IdentityMetadataWrapper } from '@celo/metadata-claims' ``` Note that Contractkit is Not a dependency. Instead when using `IdentityMetadataWrapper` you should make an object that satisfis the `AccountMetadataSignerGetters` type ```typescript import { AccountMetadataSignerGetters } from '@celo/metadata-claims/lib/types' ``` using viem it would be like ```typescript const accountsMetaDataSignerGetters: AccountMetadataSignerGetters = { isAccount: async (address: string) => accounts.read.isAccount([address as Address]), getValidatorSigner: async (address: string) => accounts.read.getValidatorSigner([address as Address]), getVoteSigner: async (address: string) => accounts.read.getValidatorSigner([address as Address]), getAttestationSigner: async (address: string) => accounts.read.getValidatorSigner([address as Address]), } ``` ### Patch Changes - Updated dependencies \[[`4ef76eb`](https://github.com/celo-org/developer-tooling/commit/4ef76eb174454f60304080d0ef63a859cd8d931b)]: - @celo/base@7.0.0-beta.0 - @celo/utils@8.0.0-beta.0 - @celo/connect@6.0.3-beta.0 - @celo/wallet-local@6.0.2-beta.0 ## @celo/metadata-claims@1.0.0-beta.0 ### Major Changes - [#340](https://github.com/celo-org/developer-tooling/pull/340) [`33ad4aa`](https://github.com/celo-org/developer-tooling/commit/33ad4aaf6b9edc33d1ce19833dbea626798cfb88) Thanks [@aaronmgdr](https://github.com/aaronmgdr)! - Introducing @celo/metadata-claims These are a series of functions extracted from @celo/contractkit since they didnt strictly need depend on contractkit itsefl. Developers can now use IdentityMetadataWrapper with any js rpc library like ethers or viem or web3js without being forced to import ContractKit. Instead when using `IdentityMetadataWrapper` you should make an object that satisfis the `AccountMetadataSignerGetters` type ```typescript import { AccountMetadataSignerGetters } from '@celo/metadata-claims/lib/types' ``` using viem it would be like ```typescript const accountsMetaDataSignerGetters: AccountMetadataSignerGetters = { isAccount: async (address: string) => accounts.read.isAccount([address as Address]), getValidatorSigner: async (address: string) => accounts.read.getValidatorSigner([address as Address]), getVoteSigner: async (address: string) => accounts.read.getValidatorSigner([address as Address]), getAttestationSigner: async (address: string) => accounts.read.getValidatorSigner([address as Address]), } ``` ### Patch Changes - Updated dependencies \[[`4ef76eb`](https://github.com/celo-org/developer-tooling/commit/4ef76eb174454f60304080d0ef63a859cd8d931b)]: - @celo/base@7.0.0-beta.0 - @celo/utils@8.0.0-beta.0 ## @celo/utils@8.0.0-beta.0 ### Major Changes - [#228](https://github.com/celo-org/developer-tooling/pull/228) [`4ef76eb`](https://github.com/celo-org/developer-tooling/commit/4ef76eb174454f60304080d0ef63a859cd8d931b) Thanks [@aaronmgdr](https://github.com/aaronmgdr)! - remove deprecated functions and consts exported from ./contacts and ./displayformating. ./currencies and ./phonenumbers. If these are used by your app we recommend to inline the functions from the previous release. - - - Full List of removed exports -- ContactPhoneNumber, MinimalContact, getContactPhoneNumber, isContact, CURRENCY_ENUM, Currency, CURRENCIES, resolveCurrency, SHORT_CURRENCIES, currencyToShortMap | getErrorMessage | anonymizedPhone | getContactNameHash ### Patch Changes - Updated dependencies \[[`4ef76eb`](https://github.com/celo-org/developer-tooling/commit/4ef76eb174454f60304080d0ef63a859cd8d931b)]: - @celo/base@7.0.0-beta.0 ## @celo/viem-account-ledger@1.0.0-beta.0 ### Major Changes - [#344](https://github.com/celo-org/developer-tooling/pull/344) [`6bba5e3`](https://github.com/celo-org/developer-tooling/commit/6bba5e377cded1c8216c5cd1cadeb4b8b764df55) Thanks [@nicolasbrugneaux](https://github.com/nicolasbrugneaux)! - Initial release ### Patch Changes - Updated dependencies \[[`4ef76eb`](https://github.com/celo-org/developer-tooling/commit/4ef76eb174454f60304080d0ef63a859cd8d931b)]: - @celo/base@7.0.0-beta.0 ## @celo/dev-utils@0.0.6-beta.0 ### Patch Changes - Updated dependencies \[]: - @celo/connect@6.0.3-beta.0 ## @celo/connect@6.0.3-beta.0 ### Patch Changes - Updated dependencies \[[`4ef76eb`](https://github.com/celo-org/developer-tooling/commit/4ef76eb174454f60304080d0ef63a859cd8d931b)]: - @celo/base@7.0.0-beta.0 - @celo/utils@8.0.0-beta.0 ## @celo/cryptographic-utils@5.1.1-beta.0 ### Patch Changes - [#389](https://github.com/celo-org/developer-tooling/pull/389) [`5a0a922`](https://github.com/celo-org/developer-tooling/commit/5a0a922f4965336849b33d5f90234766db55b2e5) Thanks [@aaronmgdr](https://github.com/aaronmgdr)! - Add warning that ETH derivation path will be the default in a future major breaking change. - Updated dependencies \[[`4ef76eb`](https://github.com/celo-org/developer-tooling/commit/4ef76eb174454f60304080d0ef63a859cd8d931b)]: - @celo/base@7.0.0-beta.0 - @celo/utils@8.0.0-beta.0 ## @celo/explorer@5.0.13-beta.0 ### Patch Changes - Updated dependencies \[[`33ad4aa`](https://github.com/celo-org/developer-tooling/commit/33ad4aaf6b9edc33d1ce19833dbea626798cfb88), [`4ef76eb`](https://github.com/celo-org/developer-tooling/commit/4ef76eb174454f60304080d0ef63a859cd8d931b)]: - @celo/contractkit@9.0.0-beta.0 - @celo/base@7.0.0-beta.0 - @celo/utils@8.0.0-beta.0 - @celo/connect@6.0.3-beta.0 ## @celo/governance@5.1.4-beta.0 ### Patch Changes - Updated dependencies \[[`33ad4aa`](https://github.com/celo-org/developer-tooling/commit/33ad4aaf6b9edc33d1ce19833dbea626798cfb88), [`4ef76eb`](https://github.com/celo-org/developer-tooling/commit/4ef76eb174454f60304080d0ef63a859cd8d931b)]: - @celo/contractkit@9.0.0-beta.0 - @celo/base@7.0.0-beta.0 - @celo/utils@8.0.0-beta.0 - @celo/explorer@5.0.13-beta.0 - @celo/connect@6.0.3-beta.0 ## @celo/keystores@5.0.12-beta.0 ### Patch Changes - Updated dependencies \[[`4ef76eb`](https://github.com/celo-org/developer-tooling/commit/4ef76eb174454f60304080d0ef63a859cd8d931b)]: - @celo/utils@8.0.0-beta.0 - @celo/wallet-local@6.0.2-beta.0 ## @celo/phone-utils@6.0.4-beta.0 ### Patch Changes - Updated dependencies \[[`4ef76eb`](https://github.com/celo-org/developer-tooling/commit/4ef76eb174454f60304080d0ef63a859cd8d931b)]: - @celo/base@7.0.0-beta.0 - @celo/utils@8.0.0-beta.0 ## @celo/transactions-uri@5.0.12-beta.0 ### Patch Changes - Updated dependencies \[[`4ef76eb`](https://github.com/celo-org/developer-tooling/commit/4ef76eb174454f60304080d0ef63a859cd8d931b)]: - @celo/base@7.0.0-beta.0 - @celo/connect@6.0.3-beta.0 ## @celo/wallet-base@6.0.2-beta.0 ### Patch Changes - Updated dependencies \[[`4ef76eb`](https://github.com/celo-org/developer-tooling/commit/4ef76eb174454f60304080d0ef63a859cd8d931b)]: - @celo/base@7.0.0-beta.0 - @celo/utils@8.0.0-beta.0 - @celo/connect@6.0.3-beta.0 ## @celo/wallet-hsm@6.0.2-beta.0 ### Patch Changes - Updated dependencies \[[`4ef76eb`](https://github.com/celo-org/developer-tooling/commit/4ef76eb174454f60304080d0ef63a859cd8d931b)]: - @celo/base@7.0.0-beta.0 ## @celo/wallet-hsm-aws@6.0.2-beta.0 ### Patch Changes - Updated dependencies \[[`4ef76eb`](https://github.com/celo-org/developer-tooling/commit/4ef76eb174454f60304080d0ef63a859cd8d931b)]: - @celo/utils@8.0.0-beta.0 - @celo/connect@6.0.3-beta.0 - @celo/wallet-base@6.0.2-beta.0 - @celo/wallet-hsm@6.0.2-beta.0 - @celo/wallet-remote@6.0.2-beta.0 ## @celo/wallet-hsm-azure@6.0.2-beta.0 ### Patch Changes - Updated dependencies \[[`4ef76eb`](https://github.com/celo-org/developer-tooling/commit/4ef76eb174454f60304080d0ef63a859cd8d931b)]: - @celo/base@7.0.0-beta.0 - @celo/utils@8.0.0-beta.0 - @celo/connect@6.0.3-beta.0 - @celo/wallet-base@6.0.2-beta.0 - @celo/wallet-hsm@6.0.2-beta.0 - @celo/wallet-remote@6.0.2-beta.0 ## @celo/wallet-hsm-gcp@6.0.2-beta.0 ### Patch Changes - Updated dependencies \[[`4ef76eb`](https://github.com/celo-org/developer-tooling/commit/4ef76eb174454f60304080d0ef63a859cd8d931b)]: - @celo/utils@8.0.0-beta.0 - @celo/connect@6.0.3-beta.0 - @celo/wallet-base@6.0.2-beta.0 - @celo/wallet-hsm@6.0.2-beta.0 - @celo/wallet-remote@6.0.2-beta.0 ## @celo/wallet-ledger@6.0.2-beta.0 ### Patch Changes - [#395](https://github.com/celo-org/developer-tooling/pull/395) [`693f6e7`](https://github.com/celo-org/developer-tooling/commit/693f6e7d2fe3034b6d7a3bc4a9719e76229d1981) Thanks [@aaronmgdr](https://github.com/aaronmgdr)! - Fix issue where ledger running celo firmware app 1.1.10 could not send fee token transactions or perform and interactions with those contracts - Updated dependencies \[[`4ef76eb`](https://github.com/celo-org/developer-tooling/commit/4ef76eb174454f60304080d0ef63a859cd8d931b)]: - @celo/base@7.0.0-beta.0 - @celo/utils@8.0.0-beta.0 - @celo/connect@6.0.3-beta.0 - @celo/wallet-base@6.0.2-beta.0 - @celo/wallet-remote@6.0.2-beta.0 ## @celo/wallet-local@6.0.2-beta.0 ### Patch Changes - Updated dependencies \[[`4ef76eb`](https://github.com/celo-org/developer-tooling/commit/4ef76eb174454f60304080d0ef63a859cd8d931b)]: - @celo/base@7.0.0-beta.0 - @celo/utils@8.0.0-beta.0 - @celo/connect@6.0.3-beta.0 - @celo/wallet-base@6.0.2-beta.0 ## @celo/wallet-remote@6.0.2-beta.0 ### Patch Changes - Updated dependencies \[[`4ef76eb`](https://github.com/celo-org/developer-tooling/commit/4ef76eb174454f60304080d0ef63a859cd8d931b)]: - @celo/utils@8.0.0-beta.0 - @celo/connect@6.0.3-beta.0 - @celo/wallet-base@6.0.2-beta.0 --- ## PR-Codex overview This PR focuses on updating various Celo SDK packages to their beta versions, enhancing dependency management and incorporating new features. It includes significant version bumps and updates to changelogs across multiple packages. ### Detailed summary - Updated `@celo/base` to `7.0.0-beta.0` - Updated `@celo/connect` to `6.0.3-beta.0` - Updated `@celo/utils` to `8.0.0-beta.0` - Updated `@celo/dev-utils` to `0.0.6-beta.0` - Added multiple changelog entries for various packages - Introduced new `@celo/metadata-claims` package at `1.0.0-beta.0` - Updated `@celo/contractkit` to `9.0.0-beta.0` - Updated versions in `CHANGELOG.md` files across several packages > ✨ Ask PR-Codex anything about this PR by commenting with `/codex {your question}` Co-authored-by: github-actions[bot] --- .changeset/pre.json | 14 +- packages/cli/CHANGELOG.md | 34 +++ packages/cli/package.json | 28 +-- packages/dev-utils/CHANGELOG.md | 7 + packages/dev-utils/package.json | 4 +- packages/sdk/base/CHANGELOG.md | 14 ++ packages/sdk/base/package.json | 2 +- packages/sdk/connect/CHANGELOG.md | 8 + packages/sdk/connect/package.json | 6 +- packages/sdk/contractkit/CHANGELOG.md | 51 +++++ packages/sdk/contractkit/package.json | 12 +- packages/sdk/cryptographic-utils/CHANGELOG.md | 10 + packages/sdk/cryptographic-utils/package.json | 6 +- packages/sdk/explorer/CHANGELOG.md | 10 + packages/sdk/explorer/package.json | 12 +- packages/sdk/governance/CHANGELOG.md | 11 + packages/sdk/governance/package.json | 12 +- packages/sdk/keystores/CHANGELOG.md | 8 + packages/sdk/keystores/package.json | 6 +- packages/sdk/metadata-claims/CHANGELOG.md | 33 +++ packages/sdk/metadata-claims/package.json | 8 +- packages/sdk/network-utils/package.json | 2 +- packages/sdk/phone-utils/CHANGELOG.md | 8 + packages/sdk/phone-utils/package.json | 6 +- packages/sdk/transactions-uri/CHANGELOG.md | 8 + packages/sdk/transactions-uri/package.json | 10 +- packages/sdk/utils/CHANGELOG.md | 19 ++ packages/sdk/utils/package.json | 4 +- packages/sdk/wallets/wallet-base/CHANGELOG.md | 9 + packages/sdk/wallets/wallet-base/package.json | 8 +- .../sdk/wallets/wallet-hsm-aws/CHANGELOG.md | 11 + .../sdk/wallets/wallet-hsm-aws/package.json | 12 +- .../sdk/wallets/wallet-hsm-azure/CHANGELOG.md | 12 ++ .../sdk/wallets/wallet-hsm-azure/package.json | 14 +- .../sdk/wallets/wallet-hsm-gcp/CHANGELOG.md | 11 + .../sdk/wallets/wallet-hsm-gcp/package.json | 12 +- packages/sdk/wallets/wallet-hsm/CHANGELOG.md | 7 + packages/sdk/wallets/wallet-hsm/package.json | 4 +- .../sdk/wallets/wallet-ledger/CHANGELOG.md | 13 ++ .../sdk/wallets/wallet-ledger/package.json | 14 +- .../sdk/wallets/wallet-local/CHANGELOG.md | 10 + .../sdk/wallets/wallet-local/package.json | 10 +- .../sdk/wallets/wallet-remote/CHANGELOG.md | 9 + .../sdk/wallets/wallet-remote/package.json | 8 +- packages/viem-account-ledger/CHANGELOG.md | 12 ++ packages/viem-account-ledger/package.json | 4 +- yarn.lock | 199 +++++++++--------- 47 files changed, 533 insertions(+), 199 deletions(-) create mode 100644 packages/sdk/metadata-claims/CHANGELOG.md diff --git a/.changeset/pre.json b/.changeset/pre.json index 15e1e3198..2d34ab504 100644 --- a/.changeset/pre.json +++ b/.changeset/pre.json @@ -27,5 +27,17 @@ "@celo/typescript": "0.0.1", "@celo/viem-account-ledger": "0.0.1" }, - "changesets": [] + "changesets": [ + "dry-gifts-love", + "fair-points-beg", + "fifty-roses-explain", + "gold-pumas-fry", + "hot-pugs-nail", + "hungry-cups-juggle", + "many-cobras-live", + "moody-falcons-remain", + "polite-pets-push", + "rude-parrots-know", + "thirty-pugs-smile" + ] } diff --git a/packages/cli/CHANGELOG.md b/packages/cli/CHANGELOG.md index 75256f29e..ba883d871 100644 --- a/packages/cli/CHANGELOG.md +++ b/packages/cli/CHANGELOG.md @@ -1,5 +1,39 @@ # Changelog +## 6.0.0-beta.0 + +### Major Changes + +- [#339](https://github.com/celo-org/developer-tooling/pull/339) [`87223ba`](https://github.com/celo-org/developer-tooling/commit/87223ba93ab79f43ae6884282d30a420eb09c23c) Thanks [@aaronmgdr](https://github.com/aaronmgdr)! - Remove support for reserve:\* commands. As foretold by https://forum.celo.org/t/sunset-of-reserve-commands/8454 + +- [#343](https://github.com/celo-org/developer-tooling/pull/343) [`54741cc`](https://github.com/celo-org/developer-tooling/commit/54741cc01ef0a6716bdd45a955ac65c7ecced6c1) Thanks [@aaronmgdr](https://github.com/aaronmgdr)! - Remove commands identity:identifier, identity:get-attestations + + See https://forum.celo.org/t/rfc-deprecation-of-celocli-identity-commands/8676 + +### Patch Changes + +- [#389](https://github.com/celo-org/developer-tooling/pull/389) [`5a0a922`](https://github.com/celo-org/developer-tooling/commit/5a0a922f4965336849b33d5f90234766db55b2e5) Thanks [@aaronmgdr](https://github.com/aaronmgdr)! - Add warning that ETH derivation path will be the default in a future major breaking change. + +- [#395](https://github.com/celo-org/developer-tooling/pull/395) [`693f6e7`](https://github.com/celo-org/developer-tooling/commit/693f6e7d2fe3034b6d7a3bc4a9719e76229d1981) Thanks [@aaronmgdr](https://github.com/aaronmgdr)! - Fix incorrect message where the transfered token was used as gas token in the messaging but not in actuality + +- [#395](https://github.com/celo-org/developer-tooling/pull/395) [`693f6e7`](https://github.com/celo-org/developer-tooling/commit/693f6e7d2fe3034b6d7a3bc4a9719e76229d1981) Thanks [@aaronmgdr](https://github.com/aaronmgdr)! - Fix Transfering, exchanging cusd (and other fee tokens) and or using gasCurrency flag with ledger devices prior to 1.2 + +- [#389](https://github.com/celo-org/developer-tooling/pull/389) [`5a0a922`](https://github.com/celo-org/developer-tooling/commit/5a0a922f4965336849b33d5f90234766db55b2e5) Thanks [@aaronmgdr](https://github.com/aaronmgdr)! - Fix: account:new can now be called without a node + +- Updated dependencies [[`693f6e7`](https://github.com/celo-org/developer-tooling/commit/693f6e7d2fe3034b6d7a3bc4a9719e76229d1981), [`5a0a922`](https://github.com/celo-org/developer-tooling/commit/5a0a922f4965336849b33d5f90234766db55b2e5), [`33ad4aa`](https://github.com/celo-org/developer-tooling/commit/33ad4aaf6b9edc33d1ce19833dbea626798cfb88), [`4ef76eb`](https://github.com/celo-org/developer-tooling/commit/4ef76eb174454f60304080d0ef63a859cd8d931b), [`33ad4aa`](https://github.com/celo-org/developer-tooling/commit/33ad4aaf6b9edc33d1ce19833dbea626798cfb88)]: + - @celo/wallet-ledger@6.0.2-beta.0 + - @celo/cryptographic-utils@5.1.1-beta.0 + - @celo/contractkit@9.0.0-beta.0 + - @celo/base@7.0.0-beta.0 + - @celo/utils@8.0.0-beta.0 + - @celo/metadata-claims@1.0.0-beta.0 + - @celo/explorer@5.0.13-beta.0 + - @celo/governance@5.1.4-beta.0 + - @celo/connect@6.0.3-beta.0 + - @celo/phone-utils@6.0.4-beta.0 + - @celo/wallet-hsm-azure@6.0.2-beta.0 + - @celo/wallet-local@6.0.2-beta.0 + ## 5.2.1 ### Patch Changes diff --git a/packages/cli/package.json b/packages/cli/package.json index 03c41a2b4..c21b6c180 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,7 +1,7 @@ { "name": "@celo/celocli", "description": "CLI Tool for transacting with the Celo protocol", - "version": "5.2.1", + "version": "6.0.0-beta.0", "author": "Celo", "license": "Apache-2.0", "repository": "celo-org/developer-tooling", @@ -38,20 +38,20 @@ }, "dependencies": { "@celo/abis": "11.0.0", - "@celo/base": "^6.1.0", + "@celo/base": "^7.0.0-beta.0", "@celo/compliance": "~1.0.23", - "@celo/connect": "^6.0.2", - "@celo/contractkit": "^8.3.0", - "@celo/cryptographic-utils": "^5.1.0", - "@celo/explorer": "^5.0.12", - "@celo/governance": "^5.1.3", + "@celo/connect": "^6.0.3-beta.0", + "@celo/contractkit": "^9.0.0-beta.0", + "@celo/cryptographic-utils": "^5.1.1-beta.0", + "@celo/explorer": "^5.0.13-beta.0", + "@celo/governance": "^5.1.4-beta.0", "@celo/identity": "^5.1.2", - "@celo/metadata-claims": "^0.0.1", - "@celo/phone-utils": "^6.0.3", - "@celo/utils": "^7.0.0", - "@celo/wallet-hsm-azure": "^6.0.1", - "@celo/wallet-ledger": "^6.0.1", - "@celo/wallet-local": "^6.0.1", + "@celo/metadata-claims": "^1.0.0-beta.0", + "@celo/phone-utils": "^6.0.4-beta.0", + "@celo/utils": "^8.0.0-beta.0", + "@celo/wallet-hsm-azure": "^6.0.2-beta.0", + "@celo/wallet-ledger": "^6.0.2-beta.0", + "@celo/wallet-local": "^6.0.2-beta.0", "@ethereumjs/util": "8.0.5", "@ledgerhq/hw-transport-node-hid": "^6.28.5", "@mento-protocol/mento-sdk": "^1.0.1", @@ -79,7 +79,7 @@ }, "devDependencies": { "@celo/celo-devchain": "^7.0.0", - "@celo/dev-utils": "0.0.5", + "@celo/dev-utils": "0.0.6-beta.0", "@celo/typescript": "workspace:^", "@types/debug": "^4.1.4", "@types/fs-extra": "^8.0.0", diff --git a/packages/dev-utils/CHANGELOG.md b/packages/dev-utils/CHANGELOG.md index 1464257da..eda3b415a 100644 --- a/packages/dev-utils/CHANGELOG.md +++ b/packages/dev-utils/CHANGELOG.md @@ -1,5 +1,12 @@ # @celo/dev-utils +## 0.0.6-beta.0 + +### Patch Changes + +- Updated dependencies []: + - @celo/connect@6.0.3-beta.0 + ## 0.0.5 ### Patch Changes diff --git a/packages/dev-utils/package.json b/packages/dev-utils/package.json index 483b49b72..360088739 100644 --- a/packages/dev-utils/package.json +++ b/packages/dev-utils/package.json @@ -1,6 +1,6 @@ { "name": "@celo/dev-utils", - "version": "0.0.5", + "version": "0.0.6-beta.0", "description": "util package for celo packages that should only be a devDependency", "main": "./lib/index.js", "types": "./lib/index.d.ts", @@ -21,7 +21,7 @@ }, "dependencies": { "@celo/abis": "^11.0.0", - "@celo/connect": "^6.0.1", + "@celo/connect": "^6.0.3-beta.0", "@viem/anvil": "^0.0.9", "bignumber.js": "^9.0.0", "fs-extra": "^8.1.0", diff --git a/packages/sdk/base/CHANGELOG.md b/packages/sdk/base/CHANGELOG.md index 5e8d2107f..abc5c1502 100644 --- a/packages/sdk/base/CHANGELOG.md +++ b/packages/sdk/base/CHANGELOG.md @@ -1,5 +1,19 @@ # @celo/base +## 7.0.0-beta.0 + +### Major Changes + +- [#228](https://github.com/celo-org/developer-tooling/pull/228) [`4ef76eb`](https://github.com/celo-org/developer-tooling/commit/4ef76eb174454f60304080d0ef63a859cd8d931b) Thanks [@aaronmgdr](https://github.com/aaronmgdr)! - remove deprecated functions and consts exported from ./contacts and ./displayformating. ./currencies and ./phonenumbers. If these are used by your app we recommend to inline the functions from the previous release. + + - https://github.com/celo-org/developer-tooling/blob/%40celo/wallet-base%406.0.1/packages/sdk/base/src/contacts.ts + - https://github.com/celo-org/developer-tooling/blob/%40celo/wallet-base%406.0.1/packages/sdk/base/src/displayFormatting.ts + - https://github.com/celo-org/developer-tooling/blob/%40celo/wallet-base%406.0.1/packages/sdk/base/src/phoneNumbers.ts + + https://github.com/celo-org/developer-tooling/tree/%40celo/wallet-base%406.0.1/packages/sdk/base/src + + Full List of removed exports -- ContactPhoneNumber, MinimalContact, getContactPhoneNumber, isContact, CURRENCY_ENUM, Currency, CURRENCIES, resolveCurrency, SHORT_CURRENCIES, currencyToShortMap | getErrorMessage | anonymizedPhone | getContactNameHash + ## 6.1.0 ### Minor Changes diff --git a/packages/sdk/base/package.json b/packages/sdk/base/package.json index 7b2474c23..5ed6451be 100644 --- a/packages/sdk/base/package.json +++ b/packages/sdk/base/package.json @@ -1,6 +1,6 @@ { "name": "@celo/base", - "version": "6.1.0", + "version": "7.0.0-beta.0", "description": "Celo base common utils, no dependencies", "author": "Celo", "license": "Apache-2.0", diff --git a/packages/sdk/connect/CHANGELOG.md b/packages/sdk/connect/CHANGELOG.md index f0034975e..895f94ea8 100644 --- a/packages/sdk/connect/CHANGELOG.md +++ b/packages/sdk/connect/CHANGELOG.md @@ -1,5 +1,13 @@ # @celo/connect +## 6.0.3-beta.0 + +### Patch Changes + +- Updated dependencies [[`4ef76eb`](https://github.com/celo-org/developer-tooling/commit/4ef76eb174454f60304080d0ef63a859cd8d931b)]: + - @celo/base@7.0.0-beta.0 + - @celo/utils@8.0.0-beta.0 + ## 6.0.2 ### Patch Changes diff --git a/packages/sdk/connect/package.json b/packages/sdk/connect/package.json index 9a33acfc5..66e0145bf 100644 --- a/packages/sdk/connect/package.json +++ b/packages/sdk/connect/package.json @@ -1,6 +1,6 @@ { "name": "@celo/connect", - "version": "6.0.2", + "version": "6.0.3-beta.0", "description": "Light Toolkit for connecting with the Celo network", "main": "./lib/index.js", "types": "./lib/index.d.ts", @@ -22,8 +22,8 @@ "prepublishOnly": "yarn build" }, "dependencies": { - "@celo/base": "^6.1.0", - "@celo/utils": "^7.0.0", + "@celo/base": "^7.0.0-beta.0", + "@celo/utils": "^8.0.0-beta.0", "@ethereumjs/util": "8.0.5", "@types/debug": "^4.1.5", "@types/utf8": "^2.1.6", diff --git a/packages/sdk/contractkit/CHANGELOG.md b/packages/sdk/contractkit/CHANGELOG.md index 481725897..3b1129148 100644 --- a/packages/sdk/contractkit/CHANGELOG.md +++ b/packages/sdk/contractkit/CHANGELOG.md @@ -1,5 +1,56 @@ # @celo/contractkit +## 9.0.0-beta.0 + +### Major Changes + +- [#340](https://github.com/celo-org/developer-tooling/pull/340) [`33ad4aa`](https://github.com/celo-org/developer-tooling/commit/33ad4aaf6b9edc33d1ce19833dbea626798cfb88) Thanks [@aaronmgdr](https://github.com/aaronmgdr)! - Removes all exports under the lib/identity folder. These have been move to a new @celo/metadata-claims package and should be imported from there. + + Note that folder structure is also flattened slightly. so replace `@celo/contractkit/lib/identity/claims/` with `@celo/metadata-claims/lib/` + + example + + ```diff + - import { createAccountClaim } from '@celo/contractkit/lib/identity/claims/account' + + import { createAccountClaim } from '@celo/metadata-claims/lib/account' + ``` + + ```diff + - import { ContractKit, IdentityMetadataWrapper, newKitFromWeb3 } from '@celo/contractkit' + - import { ClaimTypes } from '@celo/contractkit/lib/identity' + + import { ContractKit, newKitFromWeb3 } from '@celo/contractkit' + + import { ClaimTypes, IdentityMetadataWrapper } from '@celo/metadata-claims' + + ``` + + Note that Contractkit is Not a dependency. Instead when using `IdentityMetadataWrapper` you should make an object that satisfis the `AccountMetadataSignerGetters` type + + ```typescript + import { AccountMetadataSignerGetters } from '@celo/metadata-claims/lib/types' + ``` + + using viem it would be like + + ```typescript + const accountsMetaDataSignerGetters: AccountMetadataSignerGetters = { + isAccount: async (address: string) => accounts.read.isAccount([address as Address]), + getValidatorSigner: async (address: string) => + accounts.read.getValidatorSigner([address as Address]), + getVoteSigner: async (address: string) => + accounts.read.getValidatorSigner([address as Address]), + getAttestationSigner: async (address: string) => + accounts.read.getValidatorSigner([address as Address]), + } + ``` + +### Patch Changes + +- Updated dependencies [[`4ef76eb`](https://github.com/celo-org/developer-tooling/commit/4ef76eb174454f60304080d0ef63a859cd8d931b)]: + - @celo/base@7.0.0-beta.0 + - @celo/utils@8.0.0-beta.0 + - @celo/connect@6.0.3-beta.0 + - @celo/wallet-local@6.0.2-beta.0 + ## 8.3.0 ### Minor Changes diff --git a/packages/sdk/contractkit/package.json b/packages/sdk/contractkit/package.json index d6583f07d..30455b6ff 100644 --- a/packages/sdk/contractkit/package.json +++ b/packages/sdk/contractkit/package.json @@ -1,6 +1,6 @@ { "name": "@celo/contractkit", - "version": "8.3.0", + "version": "9.0.0-beta.0", "description": "Celo's ContractKit to interact with Celo network", "main": "./lib/index.js", "types": "./lib/index.d.ts", @@ -28,10 +28,10 @@ "dependencies": { "@celo/abis": "11.0.0", "@celo/abis-12": "npm:@celo/abis@12.0.0-canary.35", - "@celo/base": "^6.1.0", - "@celo/connect": "^6.0.2", - "@celo/utils": "^7.0.0", - "@celo/wallet-local": "^6.0.1", + "@celo/base": "^7.0.0-beta.0", + "@celo/connect": "^6.0.3-beta.0", + "@celo/utils": "^8.0.0-beta.0", + "@celo/wallet-local": "^6.0.2-beta.0", "@types/bn.js": "^5.1.0", "@types/debug": "^4.1.5", "bignumber.js": "^9.0.0", @@ -43,7 +43,7 @@ }, "devDependencies": { "@celo/celo-devchain": "^7.0.0", - "@celo/dev-utils": "0.0.5", + "@celo/dev-utils": "0.0.6-beta.0", "@celo/odis-identifiers": "^1.0.1", "@celo/typescript": "workspace:^", "@truffle/contract": "4.6.31", diff --git a/packages/sdk/cryptographic-utils/CHANGELOG.md b/packages/sdk/cryptographic-utils/CHANGELOG.md index a232bae60..645bd28cd 100644 --- a/packages/sdk/cryptographic-utils/CHANGELOG.md +++ b/packages/sdk/cryptographic-utils/CHANGELOG.md @@ -1,5 +1,15 @@ # @celo/cryptographic-utils +## 5.1.1-beta.0 + +### Patch Changes + +- [#389](https://github.com/celo-org/developer-tooling/pull/389) [`5a0a922`](https://github.com/celo-org/developer-tooling/commit/5a0a922f4965336849b33d5f90234766db55b2e5) Thanks [@aaronmgdr](https://github.com/aaronmgdr)! - Add warning that ETH derivation path will be the default in a future major breaking change. + +- Updated dependencies [[`4ef76eb`](https://github.com/celo-org/developer-tooling/commit/4ef76eb174454f60304080d0ef63a859cd8d931b)]: + - @celo/base@7.0.0-beta.0 + - @celo/utils@8.0.0-beta.0 + ## 5.1.0 ### Minor Changes diff --git a/packages/sdk/cryptographic-utils/package.json b/packages/sdk/cryptographic-utils/package.json index f5cfcaf20..3e0e8858d 100644 --- a/packages/sdk/cryptographic-utils/package.json +++ b/packages/sdk/cryptographic-utils/package.json @@ -1,6 +1,6 @@ { "name": "@celo/cryptographic-utils", - "version": "5.1.0", + "version": "5.1.1-beta.0", "description": "Some Celo utils for comment/data encryption, bls, and mnemonics", "author": "Celo", "license": "Apache-2.0", @@ -22,9 +22,9 @@ "lib/**/*" ], "dependencies": { - "@celo/base": "^6.1.0", + "@celo/base": "^7.0.0-beta.0", "@celo/bls12377js": "0.1.1", - "@celo/utils": "^7.0.0", + "@celo/utils": "^8.0.0-beta.0", "@noble/ciphers": "0.4.1", "@noble/curves": "1.3.0", "@noble/hashes": "1.3.3", diff --git a/packages/sdk/explorer/CHANGELOG.md b/packages/sdk/explorer/CHANGELOG.md index 8072d06f6..bd91b91bf 100644 --- a/packages/sdk/explorer/CHANGELOG.md +++ b/packages/sdk/explorer/CHANGELOG.md @@ -1,5 +1,15 @@ # @celo/explorer +## 5.0.13-beta.0 + +### Patch Changes + +- Updated dependencies [[`33ad4aa`](https://github.com/celo-org/developer-tooling/commit/33ad4aaf6b9edc33d1ce19833dbea626798cfb88), [`4ef76eb`](https://github.com/celo-org/developer-tooling/commit/4ef76eb174454f60304080d0ef63a859cd8d931b)]: + - @celo/contractkit@9.0.0-beta.0 + - @celo/base@7.0.0-beta.0 + - @celo/utils@8.0.0-beta.0 + - @celo/connect@6.0.3-beta.0 + ## 5.0.12 ### Patch Changes diff --git a/packages/sdk/explorer/package.json b/packages/sdk/explorer/package.json index 7bb718782..09bef2e13 100644 --- a/packages/sdk/explorer/package.json +++ b/packages/sdk/explorer/package.json @@ -1,6 +1,6 @@ { "name": "@celo/explorer", - "version": "5.0.12", + "version": "5.0.13-beta.0", "description": "Celo's block explorer consumer", "main": "./lib/index.js", "types": "./lib/index.d.ts", @@ -22,17 +22,17 @@ "prepublishOnly": "yarn build" }, "dependencies": { - "@celo/base": "^6.1.0", - "@celo/connect": "^6.0.1", - "@celo/contractkit": "^8.1.1", - "@celo/utils": "^7.0.0", + "@celo/base": "^7.0.0-beta.0", + "@celo/connect": "^6.0.3-beta.0", + "@celo/contractkit": "^9.0.0-beta.0", + "@celo/utils": "^8.0.0-beta.0", "@types/debug": "^4.1.5", "bignumber.js": "9.0.0", "cross-fetch": "3.1.5", "debug": "^4.1.1" }, "devDependencies": { - "@celo/dev-utils": "0.0.5", + "@celo/dev-utils": "0.0.6-beta.0", "@celo/typescript": "workspace:^", "@types/debug": "^4.1.12", "fetch-mock": "^10.0.7", diff --git a/packages/sdk/governance/CHANGELOG.md b/packages/sdk/governance/CHANGELOG.md index b5466a8a3..88166fdc6 100644 --- a/packages/sdk/governance/CHANGELOG.md +++ b/packages/sdk/governance/CHANGELOG.md @@ -1,5 +1,16 @@ # @celo/governance +## 5.1.4-beta.0 + +### Patch Changes + +- Updated dependencies [[`33ad4aa`](https://github.com/celo-org/developer-tooling/commit/33ad4aaf6b9edc33d1ce19833dbea626798cfb88), [`4ef76eb`](https://github.com/celo-org/developer-tooling/commit/4ef76eb174454f60304080d0ef63a859cd8d931b)]: + - @celo/contractkit@9.0.0-beta.0 + - @celo/base@7.0.0-beta.0 + - @celo/utils@8.0.0-beta.0 + - @celo/explorer@5.0.13-beta.0 + - @celo/connect@6.0.3-beta.0 + ## 5.1.3 ### Patch Changes diff --git a/packages/sdk/governance/package.json b/packages/sdk/governance/package.json index d1e6b119c..b363dca2f 100644 --- a/packages/sdk/governance/package.json +++ b/packages/sdk/governance/package.json @@ -1,6 +1,6 @@ { "name": "@celo/governance", - "version": "5.1.3", + "version": "5.1.4-beta.0", "description": "Celo's governance proposals", "main": "./lib/index.js", "types": "./lib/index.d.ts", @@ -22,11 +22,11 @@ }, "dependencies": { "@celo/abis": "11.0.0", - "@celo/base": "^6.1.0", - "@celo/connect": "^6.0.1", - "@celo/contractkit": "^8.1.1", - "@celo/explorer": "^5.0.12", - "@celo/utils": "^7.0.0", + "@celo/base": "^7.0.0-beta.0", + "@celo/connect": "^6.0.3-beta.0", + "@celo/contractkit": "^9.0.0-beta.0", + "@celo/explorer": "^5.0.13-beta.0", + "@celo/utils": "^8.0.0-beta.0", "@ethereumjs/util": "8.0.5", "@types/debug": "^4.1.5", "@types/inquirer": "^6.5.0", diff --git a/packages/sdk/keystores/CHANGELOG.md b/packages/sdk/keystores/CHANGELOG.md index af0c6f882..e8b397c87 100644 --- a/packages/sdk/keystores/CHANGELOG.md +++ b/packages/sdk/keystores/CHANGELOG.md @@ -1,5 +1,13 @@ # @celo/keystores +## 5.0.12-beta.0 + +### Patch Changes + +- Updated dependencies [[`4ef76eb`](https://github.com/celo-org/developer-tooling/commit/4ef76eb174454f60304080d0ef63a859cd8d931b)]: + - @celo/utils@8.0.0-beta.0 + - @celo/wallet-local@6.0.2-beta.0 + ## 5.0.11 ### Patch Changes diff --git a/packages/sdk/keystores/package.json b/packages/sdk/keystores/package.json index 977d139b4..555eca21a 100644 --- a/packages/sdk/keystores/package.json +++ b/packages/sdk/keystores/package.json @@ -1,6 +1,6 @@ { "name": "@celo/keystores", - "version": "5.0.11", + "version": "5.0.12-beta.0", "description": "keystore implementation", "author": "Celo", "license": "Apache-2.0", @@ -22,8 +22,8 @@ "prepublishOnly": "yarn build" }, "dependencies": { - "@celo/utils": "^7.0.0", - "@celo/wallet-local": "^6.0.1", + "@celo/utils": "^8.0.0-beta.0", + "@celo/wallet-local": "^6.0.2-beta.0", "ethereumjs-wallet": "^1.0.1" }, "devDependencies": { diff --git a/packages/sdk/metadata-claims/CHANGELOG.md b/packages/sdk/metadata-claims/CHANGELOG.md new file mode 100644 index 000000000..7b6053d2a --- /dev/null +++ b/packages/sdk/metadata-claims/CHANGELOG.md @@ -0,0 +1,33 @@ +# @celo/metadata-claims + +## 1.0.0-beta.0 + +### Major Changes + +- [#340](https://github.com/celo-org/developer-tooling/pull/340) [`33ad4aa`](https://github.com/celo-org/developer-tooling/commit/33ad4aaf6b9edc33d1ce19833dbea626798cfb88) Thanks [@aaronmgdr](https://github.com/aaronmgdr)! - Introducing @celo/metadata-claims These are a series of functions extracted from @celo/contractkit since they didnt strictly need depend on contractkit itsefl. Developers can now use IdentityMetadataWrapper with any js rpc library like ethers or viem or web3js without being forced to import ContractKit. + + Instead when using `IdentityMetadataWrapper` you should make an object that satisfis the `AccountMetadataSignerGetters` type + + ```typescript + import { AccountMetadataSignerGetters } from '@celo/metadata-claims/lib/types' + ``` + + using viem it would be like + + ```typescript + const accountsMetaDataSignerGetters: AccountMetadataSignerGetters = { + isAccount: async (address: string) => accounts.read.isAccount([address as Address]), + getValidatorSigner: async (address: string) => + accounts.read.getValidatorSigner([address as Address]), + getVoteSigner: async (address: string) => + accounts.read.getValidatorSigner([address as Address]), + getAttestationSigner: async (address: string) => + accounts.read.getValidatorSigner([address as Address]), + } + ``` + +### Patch Changes + +- Updated dependencies [[`4ef76eb`](https://github.com/celo-org/developer-tooling/commit/4ef76eb174454f60304080d0ef63a859cd8d931b)]: + - @celo/base@7.0.0-beta.0 + - @celo/utils@8.0.0-beta.0 diff --git a/packages/sdk/metadata-claims/package.json b/packages/sdk/metadata-claims/package.json index 2b707ca9c..fa5ebdb7a 100644 --- a/packages/sdk/metadata-claims/package.json +++ b/packages/sdk/metadata-claims/package.json @@ -1,6 +1,6 @@ { "name": "@celo/metadata-claims", - "version": "0.0.1", + "version": "1.0.0-beta.0", "author": "cLabs", "license": "Apache-2.0", "repository": "https://github.com/celo-org/developer-tooling/tree/master/packages/sdk/metadata-claims", @@ -24,8 +24,8 @@ "lint": "yarn run --top-level eslint -c .eslintrc.js " }, "dependencies": { - "@celo/base": "^6.1.0", - "@celo/utils": "^7.0.0", + "@celo/base": "^7.0.0-beta.0", + "@celo/utils": "^8.0.0-beta.0", "cross-fetch": "3.1.5", "fp-ts": "2.1.1", "io-ts": "2.0.1" @@ -33,7 +33,7 @@ "devDependencies": { "@celo/celo-devchain": "^7.0.0", "@celo/contractkit": "workspace:^", - "@celo/dev-utils": "0.0.5", + "@celo/dev-utils": "0.0.6-beta.0", "@celo/odis-identifiers": "^1.0.1", "@celo/typescript": "workspace:^", "@types/node": "18.7.6", diff --git a/packages/sdk/network-utils/package.json b/packages/sdk/network-utils/package.json index 15c4061e9..6c453caaa 100644 --- a/packages/sdk/network-utils/package.json +++ b/packages/sdk/network-utils/package.json @@ -27,7 +27,7 @@ "debug": "^4.1.1" }, "devDependencies": { - "@celo/dev-utils": "0.0.5", + "@celo/dev-utils": "0.0.6-beta.0", "@celo/typescript": "workspace:^", "@types/debug": "^4.1.12", "fetch-mock": "^10.0.7" diff --git a/packages/sdk/phone-utils/CHANGELOG.md b/packages/sdk/phone-utils/CHANGELOG.md index 444ca5b97..a5f683f9c 100644 --- a/packages/sdk/phone-utils/CHANGELOG.md +++ b/packages/sdk/phone-utils/CHANGELOG.md @@ -1,5 +1,13 @@ # @celo/phone-utils +## 6.0.4-beta.0 + +### Patch Changes + +- Updated dependencies [[`4ef76eb`](https://github.com/celo-org/developer-tooling/commit/4ef76eb174454f60304080d0ef63a859cd8d931b)]: + - @celo/base@7.0.0-beta.0 + - @celo/utils@8.0.0-beta.0 + ## 6.0.3 ### Patch Changes diff --git a/packages/sdk/phone-utils/package.json b/packages/sdk/phone-utils/package.json index 936aa3edd..a9d5c3d99 100644 --- a/packages/sdk/phone-utils/package.json +++ b/packages/sdk/phone-utils/package.json @@ -1,6 +1,6 @@ { "name": "@celo/phone-utils", - "version": "6.0.3", + "version": "6.0.4-beta.0", "description": "Celo phone utils", "author": "Celo", "license": "Apache-2.0", @@ -22,8 +22,8 @@ "lib/**/*" ], "dependencies": { - "@celo/base": "^6.1.0", - "@celo/utils": "^7.0.0", + "@celo/base": "^7.0.0-beta.0", + "@celo/utils": "^8.0.0-beta.0", "@types/country-data": "^0.0.0", "@types/google-libphonenumber": "^7.4.23", "@types/node": "^18.7.16", diff --git a/packages/sdk/transactions-uri/CHANGELOG.md b/packages/sdk/transactions-uri/CHANGELOG.md index b26726d95..4cbfc2d4b 100644 --- a/packages/sdk/transactions-uri/CHANGELOG.md +++ b/packages/sdk/transactions-uri/CHANGELOG.md @@ -1,5 +1,13 @@ # @celo/transactions-uri +## 5.0.12-beta.0 + +### Patch Changes + +- Updated dependencies [[`4ef76eb`](https://github.com/celo-org/developer-tooling/commit/4ef76eb174454f60304080d0ef63a859cd8d931b)]: + - @celo/base@7.0.0-beta.0 + - @celo/connect@6.0.3-beta.0 + ## 5.0.11 ### Patch Changes diff --git a/packages/sdk/transactions-uri/package.json b/packages/sdk/transactions-uri/package.json index d9b23051c..42b71257f 100644 --- a/packages/sdk/transactions-uri/package.json +++ b/packages/sdk/transactions-uri/package.json @@ -1,6 +1,6 @@ { "name": "@celo/transactions-uri", - "version": "5.0.11", + "version": "5.0.12-beta.0", "description": "Celo's transactions uri generation", "main": "./lib/index.js", "types": "./lib/index.d.ts", @@ -22,8 +22,8 @@ "prepublishOnly": "yarn build" }, "dependencies": { - "@celo/base": "^6.1.0", - "@celo/connect": "^6.0.1", + "@celo/base": "^7.0.0-beta.0", + "@celo/connect": "^6.0.3-beta.0", "@types/bn.js": "^5.1.0", "@types/debug": "^4.1.5", "@types/qrcode": "^1.3.4", @@ -32,8 +32,8 @@ "web3-eth-abi": "1.10.4" }, "devDependencies": { - "@celo/contractkit": "^8.1.1", - "@celo/dev-utils": "0.0.5", + "@celo/contractkit": "^9.0.0-beta.0", + "@celo/dev-utils": "0.0.6-beta.0", "@celo/typescript": "workspace:^", "cross-fetch": "3.1.5", "dotenv": "^8.2.0", diff --git a/packages/sdk/utils/CHANGELOG.md b/packages/sdk/utils/CHANGELOG.md index b35be4a04..3e36b932d 100644 --- a/packages/sdk/utils/CHANGELOG.md +++ b/packages/sdk/utils/CHANGELOG.md @@ -1,5 +1,24 @@ # @celo/utils +## 8.0.0-beta.0 + +### Major Changes + +- [#228](https://github.com/celo-org/developer-tooling/pull/228) [`4ef76eb`](https://github.com/celo-org/developer-tooling/commit/4ef76eb174454f60304080d0ef63a859cd8d931b) Thanks [@aaronmgdr](https://github.com/aaronmgdr)! - remove deprecated functions and consts exported from ./contacts and ./displayformating. ./currencies and ./phonenumbers. If these are used by your app we recommend to inline the functions from the previous release. + + - https://github.com/celo-org/developer-tooling/blob/%40celo/wallet-base%406.0.1/packages/sdk/base/src/contacts.ts + - https://github.com/celo-org/developer-tooling/blob/%40celo/wallet-base%406.0.1/packages/sdk/base/src/displayFormatting.ts + - https://github.com/celo-org/developer-tooling/blob/%40celo/wallet-base%406.0.1/packages/sdk/base/src/phoneNumbers.ts + + https://github.com/celo-org/developer-tooling/tree/%40celo/wallet-base%406.0.1/packages/sdk/base/src + + Full List of removed exports -- ContactPhoneNumber, MinimalContact, getContactPhoneNumber, isContact, CURRENCY_ENUM, Currency, CURRENCIES, resolveCurrency, SHORT_CURRENCIES, currencyToShortMap | getErrorMessage | anonymizedPhone | getContactNameHash + +### Patch Changes + +- Updated dependencies [[`4ef76eb`](https://github.com/celo-org/developer-tooling/commit/4ef76eb174454f60304080d0ef63a859cd8d931b)]: + - @celo/base@7.0.0-beta.0 + ## 7.0.0 ### Major Changes diff --git a/packages/sdk/utils/package.json b/packages/sdk/utils/package.json index dd0849a1c..7677462dc 100644 --- a/packages/sdk/utils/package.json +++ b/packages/sdk/utils/package.json @@ -1,6 +1,6 @@ { "name": "@celo/utils", - "version": "7.0.0", + "version": "8.0.0-beta.0", "description": "Celo common utils", "author": "Celo", "license": "Apache-2.0", @@ -22,7 +22,7 @@ "lib/**/*" ], "dependencies": { - "@celo/base": "^6.1.0", + "@celo/base": "^7.0.0-beta.0", "@ethereumjs/rlp": "^5.0.2", "@ethereumjs/util": "8.0.5", "@noble/ciphers": "0.4.1", diff --git a/packages/sdk/wallets/wallet-base/CHANGELOG.md b/packages/sdk/wallets/wallet-base/CHANGELOG.md index b8f326a8c..c1ef7387c 100644 --- a/packages/sdk/wallets/wallet-base/CHANGELOG.md +++ b/packages/sdk/wallets/wallet-base/CHANGELOG.md @@ -1,5 +1,14 @@ # @celo/wallet-base +## 6.0.2-beta.0 + +### Patch Changes + +- Updated dependencies [[`4ef76eb`](https://github.com/celo-org/developer-tooling/commit/4ef76eb174454f60304080d0ef63a859cd8d931b)]: + - @celo/base@7.0.0-beta.0 + - @celo/utils@8.0.0-beta.0 + - @celo/connect@6.0.3-beta.0 + ## 6.0.1 ### Patch Changes diff --git a/packages/sdk/wallets/wallet-base/package.json b/packages/sdk/wallets/wallet-base/package.json index fc32a7a67..3c52a6c33 100644 --- a/packages/sdk/wallets/wallet-base/package.json +++ b/packages/sdk/wallets/wallet-base/package.json @@ -1,6 +1,6 @@ { "name": "@celo/wallet-base", - "version": "6.0.1", + "version": "6.0.2-beta.0", "description": "Wallet base implementation", "author": "Celo", "license": "Apache-2.0", @@ -27,9 +27,9 @@ "viem": "~1.5.4" }, "dependencies": { - "@celo/base": "^6.1.0", - "@celo/connect": "^6.0.1", - "@celo/utils": "^7.0.0", + "@celo/base": "^7.0.0-beta.0", + "@celo/connect": "^6.0.3-beta.0", + "@celo/utils": "^8.0.0-beta.0", "@ethereumjs/rlp": "^5.0.2", "@ethereumjs/util": "8.0.5", "@noble/curves": "^1.3.0", diff --git a/packages/sdk/wallets/wallet-hsm-aws/CHANGELOG.md b/packages/sdk/wallets/wallet-hsm-aws/CHANGELOG.md index 5a050dcf4..78366ca5b 100644 --- a/packages/sdk/wallets/wallet-hsm-aws/CHANGELOG.md +++ b/packages/sdk/wallets/wallet-hsm-aws/CHANGELOG.md @@ -1,5 +1,16 @@ # @celo/wallet-hsm-aws +## 6.0.2-beta.0 + +### Patch Changes + +- Updated dependencies [[`4ef76eb`](https://github.com/celo-org/developer-tooling/commit/4ef76eb174454f60304080d0ef63a859cd8d931b)]: + - @celo/utils@8.0.0-beta.0 + - @celo/connect@6.0.3-beta.0 + - @celo/wallet-base@6.0.2-beta.0 + - @celo/wallet-hsm@6.0.2-beta.0 + - @celo/wallet-remote@6.0.2-beta.0 + ## 6.0.1 ### Patch Changes diff --git a/packages/sdk/wallets/wallet-hsm-aws/package.json b/packages/sdk/wallets/wallet-hsm-aws/package.json index a257e8d35..f6ee07fef 100644 --- a/packages/sdk/wallets/wallet-hsm-aws/package.json +++ b/packages/sdk/wallets/wallet-hsm-aws/package.json @@ -1,6 +1,6 @@ { "name": "@celo/wallet-hsm-aws", - "version": "6.0.1", + "version": "6.0.2-beta.0", "description": "AWS HSM wallet implementation", "author": "Celo", "license": "Apache-2.0", @@ -22,11 +22,11 @@ "prepublishOnly": "yarn build" }, "dependencies": { - "@celo/connect": "^6.0.1", - "@celo/utils": "^7.0.0", - "@celo/wallet-base": "^6.0.1", - "@celo/wallet-hsm": "^6.0.1", - "@celo/wallet-remote": "^6.0.1", + "@celo/connect": "^6.0.3-beta.0", + "@celo/utils": "^8.0.0-beta.0", + "@celo/wallet-base": "^6.0.2-beta.0", + "@celo/wallet-hsm": "^6.0.2-beta.0", + "@celo/wallet-remote": "^6.0.2-beta.0", "@ethereumjs/util": "8.0.5", "@types/debug": "^4.1.5", "@types/secp256k1": "^4.0.0", diff --git a/packages/sdk/wallets/wallet-hsm-azure/CHANGELOG.md b/packages/sdk/wallets/wallet-hsm-azure/CHANGELOG.md index 97702b432..2025a71ec 100644 --- a/packages/sdk/wallets/wallet-hsm-azure/CHANGELOG.md +++ b/packages/sdk/wallets/wallet-hsm-azure/CHANGELOG.md @@ -1,5 +1,17 @@ # @celo/wallet-hsm-azure +## 6.0.2-beta.0 + +### Patch Changes + +- Updated dependencies [[`4ef76eb`](https://github.com/celo-org/developer-tooling/commit/4ef76eb174454f60304080d0ef63a859cd8d931b)]: + - @celo/base@7.0.0-beta.0 + - @celo/utils@8.0.0-beta.0 + - @celo/connect@6.0.3-beta.0 + - @celo/wallet-base@6.0.2-beta.0 + - @celo/wallet-hsm@6.0.2-beta.0 + - @celo/wallet-remote@6.0.2-beta.0 + ## 6.0.1 ### Patch Changes diff --git a/packages/sdk/wallets/wallet-hsm-azure/package.json b/packages/sdk/wallets/wallet-hsm-azure/package.json index c09aea018..d4abd30c4 100644 --- a/packages/sdk/wallets/wallet-hsm-azure/package.json +++ b/packages/sdk/wallets/wallet-hsm-azure/package.json @@ -1,6 +1,6 @@ { "name": "@celo/wallet-hsm-azure", - "version": "6.0.1", + "version": "6.0.2-beta.0", "description": "Azure HSM wallet implementation", "author": "Celo", "license": "Apache-2.0", @@ -25,12 +25,12 @@ "@azure/identity": "^4.0.1", "@azure/keyvault-keys": "^4.7.2", "@azure/keyvault-secrets": "^4.7.0", - "@celo/base": "^6.1.0", - "@celo/connect": "^6.0.1", - "@celo/utils": "^7.0.0", - "@celo/wallet-base": "^6.0.1", - "@celo/wallet-hsm": "^6.0.1", - "@celo/wallet-remote": "^6.0.1", + "@celo/base": "^7.0.0-beta.0", + "@celo/connect": "^6.0.3-beta.0", + "@celo/utils": "^8.0.0-beta.0", + "@celo/wallet-base": "^6.0.2-beta.0", + "@celo/wallet-hsm": "^6.0.2-beta.0", + "@celo/wallet-remote": "^6.0.2-beta.0", "@ethereumjs/util": "8.0.5", "@types/secp256k1": "^4.0.0", "bignumber.js": "^9.0.0", diff --git a/packages/sdk/wallets/wallet-hsm-gcp/CHANGELOG.md b/packages/sdk/wallets/wallet-hsm-gcp/CHANGELOG.md index 3be499a4e..8de0c85e3 100644 --- a/packages/sdk/wallets/wallet-hsm-gcp/CHANGELOG.md +++ b/packages/sdk/wallets/wallet-hsm-gcp/CHANGELOG.md @@ -1,5 +1,16 @@ # @celo/wallet-hsm-gcp +## 6.0.2-beta.0 + +### Patch Changes + +- Updated dependencies [[`4ef76eb`](https://github.com/celo-org/developer-tooling/commit/4ef76eb174454f60304080d0ef63a859cd8d931b)]: + - @celo/utils@8.0.0-beta.0 + - @celo/connect@6.0.3-beta.0 + - @celo/wallet-base@6.0.2-beta.0 + - @celo/wallet-hsm@6.0.2-beta.0 + - @celo/wallet-remote@6.0.2-beta.0 + ## 6.0.1 ### Patch Changes diff --git a/packages/sdk/wallets/wallet-hsm-gcp/package.json b/packages/sdk/wallets/wallet-hsm-gcp/package.json index 63f270c27..0796feedc 100644 --- a/packages/sdk/wallets/wallet-hsm-gcp/package.json +++ b/packages/sdk/wallets/wallet-hsm-gcp/package.json @@ -1,6 +1,6 @@ { "name": "@celo/wallet-hsm-gcp", - "version": "6.0.1", + "version": "6.0.2-beta.0", "description": "GCP HSM wallet implementation", "author": "Celo", "license": "Apache-2.0", @@ -20,11 +20,11 @@ "prepublishOnly": "yarn build" }, "dependencies": { - "@celo/connect": "^6.0.1", - "@celo/utils": "^7.0.0", - "@celo/wallet-base": "^6.0.1", - "@celo/wallet-hsm": "^6.0.1", - "@celo/wallet-remote": "^6.0.1", + "@celo/connect": "^6.0.3-beta.0", + "@celo/utils": "^8.0.0-beta.0", + "@celo/wallet-base": "^6.0.2-beta.0", + "@celo/wallet-hsm": "^6.0.2-beta.0", + "@celo/wallet-remote": "^6.0.2-beta.0", "@ethereumjs/util": "8.0.5", "@google-cloud/kms": "~2.9.0", "@noble/curves": "^1.3.0", diff --git a/packages/sdk/wallets/wallet-hsm/CHANGELOG.md b/packages/sdk/wallets/wallet-hsm/CHANGELOG.md index e2e6e28a5..b76635649 100644 --- a/packages/sdk/wallets/wallet-hsm/CHANGELOG.md +++ b/packages/sdk/wallets/wallet-hsm/CHANGELOG.md @@ -1,5 +1,12 @@ # @celo/wallet-hsm +## 6.0.2-beta.0 + +### Patch Changes + +- Updated dependencies [[`4ef76eb`](https://github.com/celo-org/developer-tooling/commit/4ef76eb174454f60304080d0ef63a859cd8d931b)]: + - @celo/base@7.0.0-beta.0 + ## 6.0.1 ## 6.0.1-beta.0 diff --git a/packages/sdk/wallets/wallet-hsm/package.json b/packages/sdk/wallets/wallet-hsm/package.json index 9a7122066..93dbc4369 100644 --- a/packages/sdk/wallets/wallet-hsm/package.json +++ b/packages/sdk/wallets/wallet-hsm/package.json @@ -1,6 +1,6 @@ { "name": "@celo/wallet-hsm", - "version": "6.0.1", + "version": "6.0.2-beta.0", "description": "HSM wallet implementation utils", "author": "Celo", "license": "Apache-2.0", @@ -22,7 +22,7 @@ "prepublishOnly": "yarn build" }, "dependencies": { - "@celo/base": "^6.1.0", + "@celo/base": "^7.0.0-beta.0", "@ethereumjs/util": "8.0.5", "@noble/ciphers": "0.4.1", "@noble/curves": "1.3.0", diff --git a/packages/sdk/wallets/wallet-ledger/CHANGELOG.md b/packages/sdk/wallets/wallet-ledger/CHANGELOG.md index 657de345d..650fa6425 100644 --- a/packages/sdk/wallets/wallet-ledger/CHANGELOG.md +++ b/packages/sdk/wallets/wallet-ledger/CHANGELOG.md @@ -1,5 +1,18 @@ # @celo/wallet-ledger +## 6.0.2-beta.0 + +### Patch Changes + +- [#395](https://github.com/celo-org/developer-tooling/pull/395) [`693f6e7`](https://github.com/celo-org/developer-tooling/commit/693f6e7d2fe3034b6d7a3bc4a9719e76229d1981) Thanks [@aaronmgdr](https://github.com/aaronmgdr)! - Fix issue where ledger running celo firmware app 1.1.10 could not send fee token transactions or perform and interactions with those contracts + +- Updated dependencies [[`4ef76eb`](https://github.com/celo-org/developer-tooling/commit/4ef76eb174454f60304080d0ef63a859cd8d931b)]: + - @celo/base@7.0.0-beta.0 + - @celo/utils@8.0.0-beta.0 + - @celo/connect@6.0.3-beta.0 + - @celo/wallet-base@6.0.2-beta.0 + - @celo/wallet-remote@6.0.2-beta.0 + ## 6.0.1 ### Patch Changes diff --git a/packages/sdk/wallets/wallet-ledger/package.json b/packages/sdk/wallets/wallet-ledger/package.json index 562c7fbe1..069971c3c 100644 --- a/packages/sdk/wallets/wallet-ledger/package.json +++ b/packages/sdk/wallets/wallet-ledger/package.json @@ -1,6 +1,6 @@ { "name": "@celo/wallet-ledger", - "version": "6.0.1", + "version": "6.0.2-beta.0", "description": "Ledger wallet implementation", "author": "Celo", "license": "Apache-2.0", @@ -24,12 +24,12 @@ "prepublishOnly": "yarn build" }, "dependencies": { - "@celo/base": "^6.1.0", - "@celo/connect": "^6.0.1", + "@celo/base": "^7.0.0-beta.0", + "@celo/connect": "^6.0.3-beta.0", "@celo/ledger-token-signer": "^0.4.0", - "@celo/utils": "^7.0.0", - "@celo/wallet-base": "^6.0.1", - "@celo/wallet-remote": "^6.0.1", + "@celo/utils": "^8.0.0-beta.0", + "@celo/wallet-base": "^6.0.2-beta.0", + "@celo/wallet-remote": "^6.0.2-beta.0", "@ethereumjs/util": "8.0.5", "@ledgerhq/errors": "^6.16.4", "@ledgerhq/hw-app-eth": "git+https://github.com:celo-org/ledgerjs-hw-app-eth.git", @@ -38,7 +38,7 @@ "semver": "^7.6.0" }, "devDependencies": { - "@celo/contractkit": "^8.1.1", + "@celo/contractkit": "^9.0.0-beta.0", "@celo/typescript": "workspace:^", "@ledgerhq/hw-transport-node-hid": "^6.28.5", "@noble/curves": "^1.4.0", diff --git a/packages/sdk/wallets/wallet-local/CHANGELOG.md b/packages/sdk/wallets/wallet-local/CHANGELOG.md index 5efe5ffe7..1e96708a9 100644 --- a/packages/sdk/wallets/wallet-local/CHANGELOG.md +++ b/packages/sdk/wallets/wallet-local/CHANGELOG.md @@ -1,5 +1,15 @@ # @celo/wallet-local +## 6.0.2-beta.0 + +### Patch Changes + +- Updated dependencies [[`4ef76eb`](https://github.com/celo-org/developer-tooling/commit/4ef76eb174454f60304080d0ef63a859cd8d931b)]: + - @celo/base@7.0.0-beta.0 + - @celo/utils@8.0.0-beta.0 + - @celo/connect@6.0.3-beta.0 + - @celo/wallet-base@6.0.2-beta.0 + ## 6.0.1 ### Patch Changes diff --git a/packages/sdk/wallets/wallet-local/package.json b/packages/sdk/wallets/wallet-local/package.json index 743659d6b..868ba4961 100644 --- a/packages/sdk/wallets/wallet-local/package.json +++ b/packages/sdk/wallets/wallet-local/package.json @@ -1,6 +1,6 @@ { "name": "@celo/wallet-local", - "version": "6.0.1", + "version": "6.0.2-beta.0", "description": "Local wallet implementation", "author": "Celo", "license": "Apache-2.0", @@ -22,10 +22,10 @@ "prepublishOnly": "yarn build" }, "dependencies": { - "@celo/base": "^6.1.0", - "@celo/connect": "^6.0.1", - "@celo/utils": "^7.0.0", - "@celo/wallet-base": "^6.0.1", + "@celo/base": "^7.0.0-beta.0", + "@celo/connect": "^6.0.3-beta.0", + "@celo/utils": "^8.0.0-beta.0", + "@celo/wallet-base": "^6.0.2-beta.0", "@ethereumjs/util": "8.0.5" }, "devDependencies": { diff --git a/packages/sdk/wallets/wallet-remote/CHANGELOG.md b/packages/sdk/wallets/wallet-remote/CHANGELOG.md index 8d309ef2b..791d16cc9 100644 --- a/packages/sdk/wallets/wallet-remote/CHANGELOG.md +++ b/packages/sdk/wallets/wallet-remote/CHANGELOG.md @@ -1,5 +1,14 @@ # @celo/wallet-remote +## 6.0.2-beta.0 + +### Patch Changes + +- Updated dependencies [[`4ef76eb`](https://github.com/celo-org/developer-tooling/commit/4ef76eb174454f60304080d0ef63a859cd8d931b)]: + - @celo/utils@8.0.0-beta.0 + - @celo/connect@6.0.3-beta.0 + - @celo/wallet-base@6.0.2-beta.0 + ## 6.0.1 ### Patch Changes diff --git a/packages/sdk/wallets/wallet-remote/package.json b/packages/sdk/wallets/wallet-remote/package.json index bec20f9b3..f0d5017f4 100644 --- a/packages/sdk/wallets/wallet-remote/package.json +++ b/packages/sdk/wallets/wallet-remote/package.json @@ -1,6 +1,6 @@ { "name": "@celo/wallet-remote", - "version": "6.0.1", + "version": "6.0.2-beta.0", "description": "Remote wallet implementation", "author": "Celo", "license": "Apache-2.0", @@ -22,9 +22,9 @@ "prepublishOnly": "yarn build" }, "dependencies": { - "@celo/connect": "^6.0.1", - "@celo/utils": "^7.0.0", - "@celo/wallet-base": "^6.0.1", + "@celo/connect": "^6.0.3-beta.0", + "@celo/utils": "^8.0.0-beta.0", + "@celo/wallet-base": "^6.0.2-beta.0", "@ethereumjs/util": "8.0.5", "@types/debug": "^4.1.5" }, diff --git a/packages/viem-account-ledger/CHANGELOG.md b/packages/viem-account-ledger/CHANGELOG.md index e69de29bb..97cc31f3f 100644 --- a/packages/viem-account-ledger/CHANGELOG.md +++ b/packages/viem-account-ledger/CHANGELOG.md @@ -0,0 +1,12 @@ +# @celo/viem-account-ledger + +## 1.0.0-beta.0 + +### Major Changes + +- [#344](https://github.com/celo-org/developer-tooling/pull/344) [`6bba5e3`](https://github.com/celo-org/developer-tooling/commit/6bba5e377cded1c8216c5cd1cadeb4b8b764df55) Thanks [@nicolasbrugneaux](https://github.com/nicolasbrugneaux)! - Initial release + +### Patch Changes + +- Updated dependencies [[`4ef76eb`](https://github.com/celo-org/developer-tooling/commit/4ef76eb174454f60304080d0ef63a859cd8d931b)]: + - @celo/base@7.0.0-beta.0 diff --git a/packages/viem-account-ledger/package.json b/packages/viem-account-ledger/package.json index 0dbe02670..7635e5d1b 100644 --- a/packages/viem-account-ledger/package.json +++ b/packages/viem-account-ledger/package.json @@ -1,6 +1,6 @@ { "name": "@celo/viem-account-ledger", - "version": "0.0.1", + "version": "1.0.0-beta.0", "description": "Helper library to make ledger<->viem interactions easier", "type": "module", "exports": { @@ -30,7 +30,7 @@ "viem": "2.x" }, "dependencies": { - "@celo/base": "^6.1.0", + "@celo/base": "^7.0.0-beta.0", "@celo/ledger-token-signer": "^0.4.0", "@ledgerhq/errors": "^6.16.4", "@ledgerhq/hw-app-eth": "git+https://github.com:celo-org/ledgerjs-hw-app-eth.git", diff --git a/yarn.lock b/yarn.lock index adf2cf933..09a02fee2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1638,7 +1638,14 @@ __metadata: languageName: node linkType: hard -"@celo/base@npm:^6.0.0, @celo/base@npm:^6.0.1, @celo/base@npm:^6.1.0, @celo/base@workspace:packages/sdk/base": +"@celo/base@npm:^6.0.0, @celo/base@npm:^6.0.1": + version: 6.1.0 + resolution: "@celo/base@npm:6.1.0" + checksum: e70a5b1313d5fafc2b048a0badc31d9de8f48dfe00eba60b45f6275f46a68ff82e90c5388dbbdd9eb6bdbed8dc91b7c86750587989e469c8dd94b71942951b7f + languageName: node + linkType: hard + +"@celo/base@npm:^7.0.0-beta.0, @celo/base@workspace:packages/sdk/base": version: 0.0.0-use.local resolution: "@celo/base@workspace:packages/sdk/base" dependencies: @@ -1681,23 +1688,23 @@ __metadata: resolution: "@celo/celocli@workspace:packages/cli" dependencies: "@celo/abis": "npm:11.0.0" - "@celo/base": "npm:^6.1.0" + "@celo/base": "npm:^7.0.0-beta.0" "@celo/celo-devchain": "npm:^7.0.0" "@celo/compliance": "npm:~1.0.23" - "@celo/connect": "npm:^6.0.2" - "@celo/contractkit": "npm:^8.3.0" - "@celo/cryptographic-utils": "npm:^5.1.0" - "@celo/dev-utils": "npm:0.0.5" - "@celo/explorer": "npm:^5.0.12" - "@celo/governance": "npm:^5.1.3" + "@celo/connect": "npm:^6.0.3-beta.0" + "@celo/contractkit": "npm:^9.0.0-beta.0" + "@celo/cryptographic-utils": "npm:^5.1.1-beta.0" + "@celo/dev-utils": "npm:0.0.6-beta.0" + "@celo/explorer": "npm:^5.0.13-beta.0" + "@celo/governance": "npm:^5.1.4-beta.0" "@celo/identity": "npm:^5.1.2" - "@celo/metadata-claims": "npm:^0.0.1" - "@celo/phone-utils": "npm:^6.0.3" + "@celo/metadata-claims": "npm:^1.0.0-beta.0" + "@celo/phone-utils": "npm:^6.0.4-beta.0" "@celo/typescript": "workspace:^" - "@celo/utils": "npm:^7.0.0" - "@celo/wallet-hsm-azure": "npm:^6.0.1" - "@celo/wallet-ledger": "npm:^6.0.1" - "@celo/wallet-local": "npm:^6.0.1" + "@celo/utils": "npm:^8.0.0-beta.0" + "@celo/wallet-hsm-azure": "npm:^6.0.2-beta.0" + "@celo/wallet-ledger": "npm:^6.0.2-beta.0" + "@celo/wallet-local": "npm:^6.0.2-beta.0" "@ethereumjs/util": "npm:8.0.5" "@ledgerhq/hw-transport-node-hid": "npm:^6.28.5" "@mento-protocol/mento-sdk": "npm:^1.0.1" @@ -1768,13 +1775,13 @@ __metadata: languageName: node linkType: hard -"@celo/connect@npm:^6.0.1, @celo/connect@npm:^6.0.2, @celo/connect@workspace:packages/sdk/connect": +"@celo/connect@npm:^6.0.3-beta.0, @celo/connect@workspace:packages/sdk/connect": version: 0.0.0-use.local resolution: "@celo/connect@workspace:packages/sdk/connect" dependencies: - "@celo/base": "npm:^6.1.0" + "@celo/base": "npm:^7.0.0-beta.0" "@celo/typescript": "workspace:^" - "@celo/utils": "npm:^7.0.0" + "@celo/utils": "npm:^8.0.0-beta.0" "@ethereumjs/util": "npm:8.0.5" "@types/debug": "npm:^4.1.12" "@types/utf8": "npm:^2.1.6" @@ -1814,20 +1821,20 @@ __metadata: languageName: node linkType: hard -"@celo/contractkit@npm:^8.1.1, @celo/contractkit@npm:^8.3.0, @celo/contractkit@workspace:^, @celo/contractkit@workspace:packages/sdk/contractkit": +"@celo/contractkit@npm:^9.0.0-beta.0, @celo/contractkit@workspace:^, @celo/contractkit@workspace:packages/sdk/contractkit": version: 0.0.0-use.local resolution: "@celo/contractkit@workspace:packages/sdk/contractkit" dependencies: "@celo/abis": "npm:11.0.0" "@celo/abis-12": "npm:@celo/abis@12.0.0-canary.35" - "@celo/base": "npm:^6.1.0" + "@celo/base": "npm:^7.0.0-beta.0" "@celo/celo-devchain": "npm:^7.0.0" - "@celo/connect": "npm:^6.0.2" - "@celo/dev-utils": "npm:0.0.5" + "@celo/connect": "npm:^6.0.3-beta.0" + "@celo/dev-utils": "npm:0.0.6-beta.0" "@celo/odis-identifiers": "npm:^1.0.1" "@celo/typescript": "workspace:^" - "@celo/utils": "npm:^7.0.0" - "@celo/wallet-local": "npm:^6.0.1" + "@celo/utils": "npm:^8.0.0-beta.0" + "@celo/wallet-local": "npm:^6.0.2-beta.0" "@truffle/contract": "npm:4.6.31" "@types/bn.js": "npm:^5.1.0" "@types/debug": "npm:^4.1.5" @@ -1848,14 +1855,14 @@ __metadata: languageName: unknown linkType: soft -"@celo/cryptographic-utils@npm:^5.1.0, @celo/cryptographic-utils@workspace:packages/sdk/cryptographic-utils": +"@celo/cryptographic-utils@npm:^5.1.1-beta.0, @celo/cryptographic-utils@workspace:packages/sdk/cryptographic-utils": version: 0.0.0-use.local resolution: "@celo/cryptographic-utils@workspace:packages/sdk/cryptographic-utils" dependencies: - "@celo/base": "npm:^6.1.0" + "@celo/base": "npm:^7.0.0-beta.0" "@celo/bls12377js": "npm:0.1.1" "@celo/typescript": "workspace:^" - "@celo/utils": "npm:^7.0.0" + "@celo/utils": "npm:^8.0.0-beta.0" "@noble/ciphers": "npm:0.4.1" "@noble/curves": "npm:1.3.0" "@noble/hashes": "npm:1.3.3" @@ -1866,12 +1873,12 @@ __metadata: languageName: unknown linkType: soft -"@celo/dev-utils@npm:0.0.5, @celo/dev-utils@workspace:packages/dev-utils": +"@celo/dev-utils@npm:0.0.6-beta.0, @celo/dev-utils@workspace:packages/dev-utils": version: 0.0.0-use.local resolution: "@celo/dev-utils@workspace:packages/dev-utils" dependencies: "@celo/abis": "npm:^11.0.0" - "@celo/connect": "npm:^6.0.1" + "@celo/connect": "npm:^6.0.3-beta.0" "@celo/devchain-anvil": "npm:12.0.0-canary.8" "@celo/typescript": "workspace:^" "@tsconfig/recommended": "npm:^1.0.3" @@ -1895,16 +1902,16 @@ __metadata: languageName: node linkType: hard -"@celo/explorer@npm:^5.0.12, @celo/explorer@workspace:packages/sdk/explorer": +"@celo/explorer@npm:^5.0.13-beta.0, @celo/explorer@workspace:packages/sdk/explorer": version: 0.0.0-use.local resolution: "@celo/explorer@workspace:packages/sdk/explorer" dependencies: - "@celo/base": "npm:^6.1.0" - "@celo/connect": "npm:^6.0.1" - "@celo/contractkit": "npm:^8.1.1" - "@celo/dev-utils": "npm:0.0.5" + "@celo/base": "npm:^7.0.0-beta.0" + "@celo/connect": "npm:^6.0.3-beta.0" + "@celo/contractkit": "npm:^9.0.0-beta.0" + "@celo/dev-utils": "npm:0.0.6-beta.0" "@celo/typescript": "workspace:^" - "@celo/utils": "npm:^7.0.0" + "@celo/utils": "npm:^8.0.0-beta.0" "@types/debug": "npm:^4.1.12" bignumber.js: "npm:9.0.0" cross-fetch: "npm:3.1.5" @@ -1914,17 +1921,17 @@ __metadata: languageName: unknown linkType: soft -"@celo/governance@npm:^5.1.3, @celo/governance@workspace:packages/sdk/governance": +"@celo/governance@npm:^5.1.4-beta.0, @celo/governance@workspace:packages/sdk/governance": version: 0.0.0-use.local resolution: "@celo/governance@workspace:packages/sdk/governance" dependencies: "@celo/abis": "npm:11.0.0" - "@celo/base": "npm:^6.1.0" - "@celo/connect": "npm:^6.0.1" - "@celo/contractkit": "npm:^8.1.1" - "@celo/explorer": "npm:^5.0.12" + "@celo/base": "npm:^7.0.0-beta.0" + "@celo/connect": "npm:^6.0.3-beta.0" + "@celo/contractkit": "npm:^9.0.0-beta.0" + "@celo/explorer": "npm:^5.0.13-beta.0" "@celo/typescript": "workspace:^" - "@celo/utils": "npm:^7.0.0" + "@celo/utils": "npm:^8.0.0-beta.0" "@ethereumjs/util": "npm:8.0.5" "@types/debug": "npm:^4.1.12" "@types/inquirer": "npm:^6.5.0" @@ -1961,8 +1968,8 @@ __metadata: resolution: "@celo/keystores@workspace:packages/sdk/keystores" dependencies: "@celo/typescript": "workspace:^" - "@celo/utils": "npm:^7.0.0" - "@celo/wallet-local": "npm:^6.0.1" + "@celo/utils": "npm:^8.0.0-beta.0" + "@celo/wallet-local": "npm:^6.0.2-beta.0" "@types/rimraf": "npm:3.0.2" ethereumjs-wallet: "npm:^1.0.1" rimraf: "npm:3.0.2" @@ -1976,17 +1983,17 @@ __metadata: languageName: node linkType: hard -"@celo/metadata-claims@npm:^0.0.1, @celo/metadata-claims@workspace:packages/sdk/metadata-claims": +"@celo/metadata-claims@npm:^1.0.0-beta.0, @celo/metadata-claims@workspace:packages/sdk/metadata-claims": version: 0.0.0-use.local resolution: "@celo/metadata-claims@workspace:packages/sdk/metadata-claims" dependencies: - "@celo/base": "npm:^6.1.0" + "@celo/base": "npm:^7.0.0-beta.0" "@celo/celo-devchain": "npm:^7.0.0" "@celo/contractkit": "workspace:^" - "@celo/dev-utils": "npm:0.0.5" + "@celo/dev-utils": "npm:0.0.6-beta.0" "@celo/odis-identifiers": "npm:^1.0.1" "@celo/typescript": "workspace:^" - "@celo/utils": "npm:^7.0.0" + "@celo/utils": "npm:^8.0.0-beta.0" "@types/node": "npm:18.7.6" cross-fetch: "npm:3.1.5" fetch-mock: "npm:^10.0.7" @@ -2002,7 +2009,7 @@ __metadata: version: 0.0.0-use.local resolution: "@celo/network-utils@workspace:packages/sdk/network-utils" dependencies: - "@celo/dev-utils": "npm:0.0.5" + "@celo/dev-utils": "npm:0.0.6-beta.0" "@celo/typescript": "workspace:^" "@types/debug": "npm:^4.1.12" cross-fetch: "npm:3.1.5" @@ -2041,13 +2048,13 @@ __metadata: languageName: node linkType: hard -"@celo/phone-utils@npm:^6.0.3, @celo/phone-utils@workspace:packages/sdk/phone-utils": +"@celo/phone-utils@npm:^6.0.4-beta.0, @celo/phone-utils@workspace:packages/sdk/phone-utils": version: 0.0.0-use.local resolution: "@celo/phone-utils@workspace:packages/sdk/phone-utils" dependencies: - "@celo/base": "npm:^6.1.0" + "@celo/base": "npm:^7.0.0-beta.0" "@celo/typescript": "workspace:^" - "@celo/utils": "npm:^7.0.0" + "@celo/utils": "npm:^8.0.0-beta.0" "@types/country-data": "npm:^0.0.0" "@types/google-libphonenumber": "npm:^7.4.23" "@types/node": "npm:^18.7.16" @@ -2063,10 +2070,10 @@ __metadata: version: 0.0.0-use.local resolution: "@celo/transactions-uri@workspace:packages/sdk/transactions-uri" dependencies: - "@celo/base": "npm:^6.1.0" - "@celo/connect": "npm:^6.0.1" - "@celo/contractkit": "npm:^8.1.1" - "@celo/dev-utils": "npm:0.0.5" + "@celo/base": "npm:^7.0.0-beta.0" + "@celo/connect": "npm:^6.0.3-beta.0" + "@celo/contractkit": "npm:^9.0.0-beta.0" + "@celo/dev-utils": "npm:0.0.6-beta.0" "@celo/typescript": "workspace:^" "@types/bn.js": "npm:^5.1.0" "@types/debug": "npm:^4.1.5" @@ -2106,11 +2113,11 @@ __metadata: languageName: node linkType: hard -"@celo/utils@npm:^7.0.0, @celo/utils@workspace:^, @celo/utils@workspace:packages/sdk/utils": +"@celo/utils@npm:^8.0.0-beta.0, @celo/utils@workspace:^, @celo/utils@workspace:packages/sdk/utils": version: 0.0.0-use.local resolution: "@celo/utils@workspace:packages/sdk/utils" dependencies: - "@celo/base": "npm:^6.1.0" + "@celo/base": "npm:^7.0.0-beta.0" "@celo/typescript": "workspace:^" "@ethereumjs/rlp": "npm:^5.0.2" "@ethereumjs/util": "npm:8.0.5" @@ -2131,7 +2138,7 @@ __metadata: version: 0.0.0-use.local resolution: "@celo/viem-account-ledger@workspace:packages/viem-account-ledger" dependencies: - "@celo/base": "npm:^6.1.0" + "@celo/base": "npm:^7.0.0-beta.0" "@celo/ledger-token-signer": "npm:^0.4.0" "@celo/typescript": "workspace:^" "@celo/utils": "workspace:^" @@ -2172,14 +2179,14 @@ __metadata: languageName: node linkType: hard -"@celo/wallet-base@npm:^6.0.1, @celo/wallet-base@workspace:^, @celo/wallet-base@workspace:packages/sdk/wallets/wallet-base": +"@celo/wallet-base@npm:^6.0.2-beta.0, @celo/wallet-base@workspace:^, @celo/wallet-base@workspace:packages/sdk/wallets/wallet-base": version: 0.0.0-use.local resolution: "@celo/wallet-base@workspace:packages/sdk/wallets/wallet-base" dependencies: - "@celo/base": "npm:^6.1.0" - "@celo/connect": "npm:^6.0.1" + "@celo/base": "npm:^7.0.0-beta.0" + "@celo/connect": "npm:^6.0.3-beta.0" "@celo/typescript": "workspace:^" - "@celo/utils": "npm:^7.0.0" + "@celo/utils": "npm:^8.0.0-beta.0" "@ethereumjs/rlp": "npm:^5.0.2" "@ethereumjs/util": "npm:8.0.5" "@noble/curves": "npm:^1.3.0" @@ -2197,12 +2204,12 @@ __metadata: version: 0.0.0-use.local resolution: "@celo/wallet-hsm-aws@workspace:packages/sdk/wallets/wallet-hsm-aws" dependencies: - "@celo/connect": "npm:^6.0.1" + "@celo/connect": "npm:^6.0.3-beta.0" "@celo/typescript": "workspace:^" - "@celo/utils": "npm:^7.0.0" - "@celo/wallet-base": "npm:^6.0.1" - "@celo/wallet-hsm": "npm:^6.0.1" - "@celo/wallet-remote": "npm:^6.0.1" + "@celo/utils": "npm:^8.0.0-beta.0" + "@celo/wallet-base": "npm:^6.0.2-beta.0" + "@celo/wallet-hsm": "npm:^6.0.2-beta.0" + "@celo/wallet-remote": "npm:^6.0.2-beta.0" "@ethereumjs/util": "npm:8.0.5" "@noble/ciphers": "npm:0.4.1" "@noble/curves": "npm:1.3.0" @@ -2217,20 +2224,20 @@ __metadata: languageName: unknown linkType: soft -"@celo/wallet-hsm-azure@npm:^6.0.1, @celo/wallet-hsm-azure@workspace:packages/sdk/wallets/wallet-hsm-azure": +"@celo/wallet-hsm-azure@npm:^6.0.2-beta.0, @celo/wallet-hsm-azure@workspace:packages/sdk/wallets/wallet-hsm-azure": version: 0.0.0-use.local resolution: "@celo/wallet-hsm-azure@workspace:packages/sdk/wallets/wallet-hsm-azure" dependencies: "@azure/identity": "npm:^4.0.1" "@azure/keyvault-keys": "npm:^4.7.2" "@azure/keyvault-secrets": "npm:^4.7.0" - "@celo/base": "npm:^6.1.0" - "@celo/connect": "npm:^6.0.1" + "@celo/base": "npm:^7.0.0-beta.0" + "@celo/connect": "npm:^6.0.3-beta.0" "@celo/typescript": "workspace:^" - "@celo/utils": "npm:^7.0.0" - "@celo/wallet-base": "npm:^6.0.1" - "@celo/wallet-hsm": "npm:^6.0.1" - "@celo/wallet-remote": "npm:^6.0.1" + "@celo/utils": "npm:^8.0.0-beta.0" + "@celo/wallet-base": "npm:^6.0.2-beta.0" + "@celo/wallet-hsm": "npm:^6.0.2-beta.0" + "@celo/wallet-remote": "npm:^6.0.2-beta.0" "@ethereumjs/util": "npm:8.0.5" "@noble/ciphers": "npm:0.4.1" "@noble/curves": "npm:1.3.0" @@ -2248,12 +2255,12 @@ __metadata: version: 0.0.0-use.local resolution: "@celo/wallet-hsm-gcp@workspace:packages/sdk/wallets/wallet-hsm-gcp" dependencies: - "@celo/connect": "npm:^6.0.1" + "@celo/connect": "npm:^6.0.3-beta.0" "@celo/typescript": "workspace:^" - "@celo/utils": "npm:^7.0.0" - "@celo/wallet-base": "npm:^6.0.1" - "@celo/wallet-hsm": "npm:^6.0.1" - "@celo/wallet-remote": "npm:^6.0.1" + "@celo/utils": "npm:^8.0.0-beta.0" + "@celo/wallet-base": "npm:^6.0.2-beta.0" + "@celo/wallet-hsm": "npm:^6.0.2-beta.0" + "@celo/wallet-remote": "npm:^6.0.2-beta.0" "@ethereumjs/util": "npm:8.0.5" "@google-cloud/kms": "npm:~2.9.0" "@noble/ciphers": "npm:0.4.1" @@ -2268,11 +2275,11 @@ __metadata: languageName: unknown linkType: soft -"@celo/wallet-hsm@npm:^6.0.1, @celo/wallet-hsm@workspace:packages/sdk/wallets/wallet-hsm": +"@celo/wallet-hsm@npm:^6.0.2-beta.0, @celo/wallet-hsm@workspace:packages/sdk/wallets/wallet-hsm": version: 0.0.0-use.local resolution: "@celo/wallet-hsm@workspace:packages/sdk/wallets/wallet-hsm" dependencies: - "@celo/base": "npm:^6.1.0" + "@celo/base": "npm:^7.0.0-beta.0" "@celo/typescript": "workspace:^" "@ethereumjs/util": "npm:8.0.5" "@noble/ciphers": "npm:0.4.1" @@ -2287,18 +2294,18 @@ __metadata: languageName: unknown linkType: soft -"@celo/wallet-ledger@npm:^6.0.1, @celo/wallet-ledger@workspace:packages/sdk/wallets/wallet-ledger": +"@celo/wallet-ledger@npm:^6.0.2-beta.0, @celo/wallet-ledger@workspace:packages/sdk/wallets/wallet-ledger": version: 0.0.0-use.local resolution: "@celo/wallet-ledger@workspace:packages/sdk/wallets/wallet-ledger" dependencies: - "@celo/base": "npm:^6.1.0" - "@celo/connect": "npm:^6.0.1" - "@celo/contractkit": "npm:^8.1.1" + "@celo/base": "npm:^7.0.0-beta.0" + "@celo/connect": "npm:^6.0.3-beta.0" + "@celo/contractkit": "npm:^9.0.0-beta.0" "@celo/ledger-token-signer": "npm:^0.4.0" "@celo/typescript": "workspace:^" - "@celo/utils": "npm:^7.0.0" - "@celo/wallet-base": "npm:^6.0.1" - "@celo/wallet-remote": "npm:^6.0.1" + "@celo/utils": "npm:^8.0.0-beta.0" + "@celo/wallet-base": "npm:^6.0.2-beta.0" + "@celo/wallet-remote": "npm:^6.0.2-beta.0" "@ethereumjs/util": "npm:8.0.5" "@ledgerhq/errors": "npm:^6.16.4" "@ledgerhq/hw-app-eth": "git+https://github.com:celo-org/ledgerjs-hw-app-eth.git" @@ -2329,15 +2336,15 @@ __metadata: languageName: node linkType: hard -"@celo/wallet-local@npm:^6.0.1, @celo/wallet-local@workspace:packages/sdk/wallets/wallet-local": +"@celo/wallet-local@npm:^6.0.2-beta.0, @celo/wallet-local@workspace:packages/sdk/wallets/wallet-local": version: 0.0.0-use.local resolution: "@celo/wallet-local@workspace:packages/sdk/wallets/wallet-local" dependencies: - "@celo/base": "npm:^6.1.0" - "@celo/connect": "npm:^6.0.1" + "@celo/base": "npm:^7.0.0-beta.0" + "@celo/connect": "npm:^6.0.3-beta.0" "@celo/typescript": "workspace:^" - "@celo/utils": "npm:^7.0.0" - "@celo/wallet-base": "npm:^6.0.1" + "@celo/utils": "npm:^8.0.0-beta.0" + "@celo/wallet-base": "npm:^6.0.2-beta.0" "@ethereumjs/util": "npm:8.0.5" "@types/debug": "npm:^4.1.12" debug: "npm:^4.3.5" @@ -2346,14 +2353,14 @@ __metadata: languageName: unknown linkType: soft -"@celo/wallet-remote@npm:^6.0.1, @celo/wallet-remote@workspace:^, @celo/wallet-remote@workspace:packages/sdk/wallets/wallet-remote": +"@celo/wallet-remote@npm:^6.0.2-beta.0, @celo/wallet-remote@workspace:^, @celo/wallet-remote@workspace:packages/sdk/wallets/wallet-remote": version: 0.0.0-use.local resolution: "@celo/wallet-remote@workspace:packages/sdk/wallets/wallet-remote" dependencies: - "@celo/connect": "npm:^6.0.1" + "@celo/connect": "npm:^6.0.3-beta.0" "@celo/typescript": "workspace:^" - "@celo/utils": "npm:^7.0.0" - "@celo/wallet-base": "npm:^6.0.1" + "@celo/utils": "npm:^8.0.0-beta.0" + "@celo/wallet-base": "npm:^6.0.2-beta.0" "@ethereumjs/util": "npm:8.0.5" "@types/debug": "npm:^4.1.5" web3: "npm:1.10.4" From c0c1644e5bc00c10c2d97b7544d916f4559e9fa0 Mon Sep 17 00:00:00 2001 From: Aaron DeRuvo Date: Mon, 14 Oct 2024 16:05:46 +0200 Subject: [PATCH 12/54] doc generation for viem to account ledger (#390) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ### Description It looks like our new package was not included in docs. ### Other changes I narrowed which files were included in docs to just the functions and constants actually exported publically ### Tested --- ## PR-Codex overview This PR focuses on enhancing the `@celo/viem-account-ledger` library by updating type definitions, improving documentation, and modifying the CI workflow to include all package directories. ### Detailed summary - Updated `Hex` type definition in `types.ts`. - Added module documentation in `modules.md`. - Updated `typedoc.json` to include README and entry points. - Modified CI workflow to track all package directories. - Changed `LedgerAccount` type to be exported in `ledger-to-account.ts`. - Added detailed documentation for `ledgerToAccount` function. - Enhanced README with installation and usage instructions. - Created detailed module documentation for `ledger-to-account`. > ✨ Ask PR-Codex anything about this PR by commenting with `/codex {your question}` --- .github/workflows/ci.yml | 3 +- packages/docs/viem-account-ledger/README.md | 57 ++++++++++++ packages/docs/viem-account-ledger/modules.md | 10 +++ .../docs/viem-account-ledger/modules/index.md | 29 +++++++ .../modules/ledger_to_account.md | 86 +++++++++++++++++++ packages/viem-account-ledger/src/data.ts | 2 + .../src/ledger-to-account.ts | 11 ++- packages/viem-account-ledger/src/types.ts | 1 + packages/viem-account-ledger/typedoc.json | 5 +- 9 files changed, 199 insertions(+), 5 deletions(-) create mode 100644 packages/docs/viem-account-ledger/README.md create mode 100644 packages/docs/viem-account-ledger/modules.md create mode 100644 packages/docs/viem-account-ledger/modules/index.md create mode 100644 packages/docs/viem-account-ledger/modules/ledger_to_account.md diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c29d07e8b..03ac8102b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -317,9 +317,8 @@ jobs: needs: [install-dependencies] if: | github.base_ref == 'master' || contains(github.base_ref, 'staging') || contains(github.base_ref, 'production') || - contains(needs.install-dependencies.outputs.all_modified_files, 'packages/cli') || + contains(needs.install-dependencies.outputs.all_modified_files, 'packages/**') || contains(needs.install-dependencies.outputs.all_modified_files, 'packages/sdk') || - contains(needs.install-dependencies.outputs.all_modified_files, 'packages/typescript') || contains(needs.install-dependencies.outputs.all_modified_files, ',package.json') || contains(needs.install-dependencies.outputs.all_modified_files, ',yarn.lock') || false diff --git a/packages/docs/viem-account-ledger/README.md b/packages/docs/viem-account-ledger/README.md new file mode 100644 index 000000000..c6a6f6e8a --- /dev/null +++ b/packages/docs/viem-account-ledger/README.md @@ -0,0 +1,57 @@ +@celo/viem-account-ledger / [Modules](modules.md) + +# @celo/viem-account-ledger + +This library aims to ease the usage of a ledger device with (viem)[https://viem.sh/]. + +## Installation + +```bash +npm install @celo/viem-account-ledger viem@2 @ledgerhq/transport-node-hid@6.x +# or yarn or bun or ... +``` + +> [!IMPORTANT] > `viem` is a peer dependency and MUST be installed alongside this library. +> `@ledgerhq/transport-node-hid` is a peer dependency and MUST be installed alongside this library. + +## Usage + +```ts +import TransportNodeHid from '@ledgerhq/hw-transport-node-hid' +import { createWalletClient } from 'viem' +import { celo, celoAlfajores } from 'viem/chains' +import { ledgerToAccount } from '@celo/viem-account-ledger' + +async function main() => { + const account = await ledgerToAccount({ + transport: await TransportNodeHid.open(''), + }) + const client = createWalletClient({ + account, + chain: celo, + transport: http() + }); + await client.sendTransaction({ + to: '0x123...', + value: 10n, + feeCurrency: '0x123...' + }); +} +``` + +You can also use the `account` directly eg: + +```ts +const account = await ledgerToAccount({ + transport: await TransportNodeHid.open(''), +}) +account.signTransaction({ + to: '0x123...', + value: 123n, + chainId: celoAlfajores.id, + nonce: 42, + maxFeePerGas: 100n, + maxPriorityFeePerGas: 100n, + feeCurrency: '0x123...', +}) +``` diff --git a/packages/docs/viem-account-ledger/modules.md b/packages/docs/viem-account-ledger/modules.md new file mode 100644 index 000000000..605257c8e --- /dev/null +++ b/packages/docs/viem-account-ledger/modules.md @@ -0,0 +1,10 @@ +[@celo/viem-account-ledger](README.md) / Modules + +# @celo/viem-account-ledger + +## Table of contents + +### Modules + +- [index](modules/index.md) +- [ledger-to-account](modules/ledger_to_account.md) diff --git a/packages/docs/viem-account-ledger/modules/index.md b/packages/docs/viem-account-ledger/modules/index.md new file mode 100644 index 000000000..20cd19a72 --- /dev/null +++ b/packages/docs/viem-account-ledger/modules/index.md @@ -0,0 +1,29 @@ +[@celo/viem-account-ledger](../README.md) / [Modules](../modules.md) / index + +# Module: index + +## Table of contents + +### References + +- [CELO\_BASE\_DERIVATION\_PATH](index.md#celo_base_derivation_path) +- [DEFAULT\_DERIVATION\_PATH](index.md#default_derivation_path) +- [ledgerToAccount](index.md#ledgertoaccount) + +## References + +### CELO\_BASE\_DERIVATION\_PATH + +Re-exports [CELO_BASE_DERIVATION_PATH](ledger_to_account.md#celo_base_derivation_path) + +___ + +### DEFAULT\_DERIVATION\_PATH + +Re-exports [DEFAULT_DERIVATION_PATH](ledger_to_account.md#default_derivation_path) + +___ + +### ledgerToAccount + +Re-exports [ledgerToAccount](ledger_to_account.md#ledgertoaccount) diff --git a/packages/docs/viem-account-ledger/modules/ledger_to_account.md b/packages/docs/viem-account-ledger/modules/ledger_to_account.md new file mode 100644 index 000000000..f88e9f991 --- /dev/null +++ b/packages/docs/viem-account-ledger/modules/ledger_to_account.md @@ -0,0 +1,86 @@ +[@celo/viem-account-ledger](../README.md) / [Modules](../modules.md) / ledger-to-account + +# Module: ledger-to-account + +## Table of contents + +### Type Aliases + +- [LedgerAccount](ledger_to_account.md#ledgeraccount) + +### Variables + +- [CELO\_BASE\_DERIVATION\_PATH](ledger_to_account.md#celo_base_derivation_path) +- [DEFAULT\_DERIVATION\_PATH](ledger_to_account.md#default_derivation_path) +- [ETH\_DERIVATION\_PATH\_BASE](ledger_to_account.md#eth_derivation_path_base) + +### Functions + +- [ledgerToAccount](ledger_to_account.md#ledgertoaccount) + +## Type Aliases + +### LedgerAccount + +Ƭ **LedgerAccount**: `LocalAccount`\<``"ledger"``\> + +#### Defined in + +[ledger-to-account.ts:10](https://github.com/celo-org/developer-tooling/blob/master/packages/viem-account-ledger/src/ledger-to-account.ts#L10) + +## Variables + +### CELO\_BASE\_DERIVATION\_PATH + +• `Const` **CELO\_BASE\_DERIVATION\_PATH**: `string` + +#### Defined in + +[ledger-to-account.ts:13](https://github.com/celo-org/developer-tooling/blob/master/packages/viem-account-ledger/src/ledger-to-account.ts#L13) + +___ + +### DEFAULT\_DERIVATION\_PATH + +• `Const` **DEFAULT\_DERIVATION\_PATH**: `string` + +#### Defined in + +[ledger-to-account.ts:14](https://github.com/celo-org/developer-tooling/blob/master/packages/viem-account-ledger/src/ledger-to-account.ts#L14) + +___ + +### ETH\_DERIVATION\_PATH\_BASE + +• `Const` **ETH\_DERIVATION\_PATH\_BASE**: ``"m/44'/60'/0'"`` + +#### Defined in + +[ledger-to-account.ts:12](https://github.com/celo-org/developer-tooling/blob/master/packages/viem-account-ledger/src/ledger-to-account.ts#L12) + +## Functions + +### ledgerToAccount + +▸ **ledgerToAccount**(`options`): `Promise`\<[`LedgerAccount`](ledger_to_account.md#ledgeraccount)\> + +A function to create a ledger account for viem + +#### Parameters + +| Name | Type | Default value | Description | +| :------ | :------ | :------ | :------ | +| `options` | `Object` | `undefined` | | +| `options.baseDerivationPath?` | `string` | `DEFAULT_DERIVATION_PATH` | defaults to "m/44'/60'/0" | +| `options.derivationPathIndex?` | `string` \| `number` | `0` | aka addressIndex | +| `options.transport` | `default` | `undefined` | a Ledger Transport | + +#### Returns + +`Promise`\<[`LedgerAccount`](ledger_to_account.md#ledgeraccount)\> + +a viem LocalAccount<"ledger"> + +#### Defined in + +[ledger-to-account.ts:25](https://github.com/celo-org/developer-tooling/blob/master/packages/viem-account-ledger/src/ledger-to-account.ts#L25) diff --git a/packages/viem-account-ledger/src/data.ts b/packages/viem-account-ledger/src/data.ts index d348d9795..8cdf5130a 100644 --- a/packages/viem-account-ledger/src/data.ts +++ b/packages/viem-account-ledger/src/data.ts @@ -1,6 +1,7 @@ // export default 'AAAAaARDRUxPRx7ON1DaI3+TuOM5xTaYm4l4pDgAAAASAACk7DBFAiEA5rECRg94+fCoIvoG9/5qWh62zl2C6Y+aFuuZrFe4CtcCIEJbRrkL3gqwT/Jj+7L3neazgpVCCTZZ3HX9JXXg5vleAAAAaARjVVNEdl3oFoRYYedaJfyhIrtomLixKCoAAAASAACk7DBFAiEApwQFHNBKXp+V2jq8BMD2y/5AwC9bhPQ2H4hT/vMl/B4CIFalOVtBFGREUKMU/F5vDlJLeQrTn6GQeDertpB2FpMvAAAAaARjRVVS2HY8uidqNzjm3oW0s79f3tbWynMAAAASAACk7DBFAiEAh2UeP1+SI2Ed5SiAjpJF6MkMrVa94gUwjJztyBlzhWMCIHfaOrEsxdxAGx+P+hxuSNO4zcw6KRLfJkkuic1V/CrHAAAAagZiIENFTE/dyb5X9VP+dXUtYWBrlMvX4CZO+AAAABIAAPNwMEUCIQCi62KsBfuNcfX0MriiRZ7a5DKERhtIz7sZ1SqBT7ruhgIgVrfmavyWzxzDW4AQeHn++A4qPjB1pQKoHvNXo8Hf1SMAAABpBmIgY1VTRGJJKmRKWI/ZBCcL7QatUrmr/qGuAAAAEgAA83AwRAIgGDYx4oB/gkYUqLeXqvEZXx9nOxVHzTe2ajyd2wnehxgCICQBe/rBPcXiaQJj3pdoXxroct/hV6r3G2G7y79EOEAPAAAAaQZiIGNFVVL57OMBJHrSziGJSUGDCiRw9Od0ygAAABIAAPNwMEQCIEdcFWP+HxEUoF1sCGVd34QGS0hL5cVUdrWdqVm3bYTgAiBCMA+Rg3Ubc3xla/35wzZesPlbeSMEPcr4uqL+8PeydwAAAGoGYSBDRUxP8ZSv31CwPmm9fQV8GqnhDJlU5MkAAAASAACu8zBFAiEAk/o0FBus2/QCrunFGEyoneQIRaMRC+y5L6Dvar8MU/kCIByJt2ziRhDG3AAbyXBIuJfZQujSHFcSJL3xF0xIlcPdAAAAaQZhIGNVU0SHQGn6HrFtRNYi8uDKJe6hcjabwQAAABIAAK7zMEQCIClrH2xgE3WMbD+hgQ7t5SiAcVG5WiUZ655voqCszKEoAiA/cO8UVgNY891MNJ5yeDk8w47WO0E1DQecrK71LR8g8gAAAGoGYSBjRVVSEMiSpuxDpT5F0LkWtLfTg7G3jA8AAAASAACu8zBFAiEAgpktbB1ZxyAwMJwKTSbZ30n8zgRuW0twbXoZxlsUAswCIHek4l4CIbjVMG2HVr0Ml9/8kA4F9dr69JBMaoSUkdKl' // This was signed by Marek Olszewski on Wed 18 June 2024 +/** @internal */ export default 'AAAAZwRVU0RUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAACk7DBEAiA45AhZco0/POPgpuUPBqRnGG1SfGPpXE8+Hckw0dZLCQIgWteUoWhghs0KwxfgX2P0jJ2gYQEAbq6J+mWfSs9yWzcAAABnBFVTRFQOKj4FvJoW9SkqYXBFanEMuJxvcgAAABIAAKTsMEQCIAl/QSQA3JAF4c+otYCNG+JghDIV17habVFg/kLOLG9UAiAY+PSK6WBYObKt8OObZHKiAVWHOaI0E26OC61ytGCN4wAAAGgEVVNEQwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAApOwwRQIhAJAwutARDDU/EgrpV1SYRuLsKR/JjkYP4rRT6InIlo8GAiAgyuHrUNUuEdfijlmY8UWzR/jzLzycmkjEjL8qV06GvwAAAGcEVVNEQy8l3rOEjCB/yODDQDWzun/BV2ArAAAAEgAApOwwRAIgVYSG4e4JD7mbHMdOd29i5c4872THYeVWqDsb6ZE0JA4CIGVsHMurIGTBw1WUJqmOsBXUBlP5bhljUufw9jgQKq7JAAAAaARlWE9Gc/k9zEnLiiOeIDJmPpR13V7ymggAAAASAACk7DBFAiEA31wGJ9NfYN5Ujs3qkNxXowT73iNAxrBw7SdHTfLn47UCIH0fhGCTysFEdN31WIVCvkgoB2VKaF7Q6i8sZFOj++4XAAAAaARjVVNEdl3oFoRYYedaJfyhIrtomLixKCoAAAASAACk7DBFAiEApwQFHNBKXp+V2jq8BMD2y/5AwC9bhPQ2H4hT/vMl/B4CIFalOVtBFGREUKMU/F5vDlJLeQrTn6GQeDertpB2FpMvAAAAaARjRVVS2HY8uidqNzjm3oW0s79f3tbWynMAAAASAACk7DBFAiEAh2UeP1+SI2Ed5SiAjpJF6MkMrVa94gUwjJztyBlzhWMCIHfaOrEsxdxAGx+P+hxuSNO4zcw6KRLfJkkuic1V/CrHAAAAaAVjUkVBTOhTej0FbaRGZ3uenWxdtwTqq0eHAAAAEgAApOwwRAIgKq0LIfD4D+gU3xANTkNfCrpo8CBBZlpasrsjd/E3YuoCICU2CvRG4xPmFzmmDLIjvN2ARrjqtkwAjLeQ8jUxRbZIAAAAaQZiIGNVU0RiSSpkSliP2QQnC+0GrVK5q/6hrgAAABIAAPNwMEQCIBg2MeKAf4JGFKi3l6rxGV8fZzsVR803tmo8ndsJ3ocYAiAkAXv6wT3F4mkCY96XaF8a6HLf4Veq9xthu8u/RDhADwAAAGkGYiBlWE9GZMHYEmc+k7wDatw9VH2ZUGltpa8AAAASAADzcDBEAiAL0g/ZekAf2Zok/7GXeIcwKMibuiLprWKUDIxl8BcLRwIgJBOEVGXOISlfVmuqdUWrbR2xR9DNYafBO4wCxQN2mUEAAABqB2IgY1JFQUxqDu8r7Uww3Cy0L+bF8B+A9+8W0QAAABIAAPNwMEQCIAuSOFoyw6PPiuegcqMLtpvPU5ip23jlQKvjcggLxT0UAiAiVDv5VON1+peijMemQCD3Gvcz+BtCAgC60z76+mm2xQAAAGkGYiBjRVVS+ezjASR60s4hiUlBgwokcPTndMoAAAASAADzcDBEAiBHXBVj/h8RFKBdbAhlXd+EBktIS+XFVHa1nalZt22E4AIgQjAPkYN1G3N8ZWv9+cM2XrD5W3kjBD3K+Lqi/vD3sncAAABoBGEgRyQD09q4Q+bAOz0nHv+ReOapbCjSXwAAABIAAK7zMEUCIQCZTGG2AjD7sgxeavTx9xhfi8TEkEGv83Es3sl31NVjwwIgdUpDy6iaoiJbHxT/0/tiHs8FGYYdKRE1EPzMUIcm2+oAAABqBmEgY0VVUhDIkqbsQ6U+RdC5FrS304Oxt4wPAAAAEgAArvMwRQIhAIKZLWwdWccgMDCcCk0m2d9J/M4EbltLcG16GcZbFALMAiB3pOJeAiG41TBth1a9DJff/JAOBfXa+vSQTGqElJHSpQAAAGkFYSBFRkMa17YXy2xRVqbepuR1FNFkdrmfOAAAAAYAAK7zMEUCIQDIjpFbbedbDHebk1HaK2VoxHzTe8Tkn5VrB2KCne0i5QIgF8g1CYG9jclyquUUxC+vPprZPnCSSroJxMWhYIxgRtAAAABqBmEgVVNEQ0gi5Y3m9eSF75DfUcQc4BchMx3AAAAABgAArvMwRQIhANOSBnG6FiIl0EprRvWagcC7r8EJyzkC0XKum71zUQXAAiASh91Kt5m0jm7BVXRZou1xV+8DwCs4Nn3oT+Ogb1NRdAAAAGgFYSBFRkN9AneQmY9xSylMlv2p4nr1htHrtQAAAAYAAK7zMEQCICnuUijiwCApPFmsqpFcI3KdDgI4ueArA6Xgc9pd31ROAiBMr8ljj6A7N3vgklG8sSNAvbCB+WujFTtZFWYGwYHFrwAAAGkGYSBjVVNEh0Bp+h6xbUTWIvLgyiXuoXI2m8EAAAASAACu8zBEAiApax9sYBN1jGw/oYEO7eUogHFRuVolGeueb6KgrMyhKAIgP3DvFFYDWPPdTDSecng5PMOO1jtBNQ0HnKyu9S0fIPIAAABpBmEgZVhPRrD6FeACUW0DAYhAWcCqwPDHKwGdAAAAEgAArvMwRAIgIBy2pPKNIi1HG3FrxikDxfZL0NZQcKhUKMFiaiu0cxsCIDyeMa3QZM71diszR3uNso9U+mmB9AxMzVL6RLHmjRlbAAAAagZhIFVTRFTE+G6bSliNUBwcPiVijf1QvI1hXgAAABIAAK7zMEUCIQDX0yUA7NuyMcn52Q3o4f5aouT7hqLRDK05zaSapCT3qAIgDW3F0IpF386QYNiGqThC4a5OsgII7Kfz/qW6EYq1+VQAAABrB2EgY1JFQUzk1Rd4XQkdPFSBiDLbYJS8wnRFRQAAABIAAK7zMEUCIQDVjhKnLdzKU84vV/13nvvshLsaCC4IfzLFmieUNniSMAIgMCRja6R+GcT2OFVF8ClIx/7ZBlIHEIqooo/8Bnpy1sc=' // How did we get this? By following these steps: @@ -11,6 +12,7 @@ export default 'AAAAZwRVU0RUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAACk7DBEAiA45AhZco0/ // 5 - and store it in key `KEY=04b06cf5d8f7ed71d8bd9b9dc37944a1c6d240f69bb0be3621dddbb6ac0eccd1508bcc2ea46227e43b941e2c6f1b1cd0ae68e54b185e2cabef3455580604bd45b8` // 5 - finally run `echo $ASN1_PREFIX$KEY | xxd -r -p - | openssl ec -inform der -pubin -pubout` // 6 - enjoy +/** @internal */ export const legacyLedgerPublicKeyHex = [ `-----BEGIN PUBLIC KEY-----`, `MFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEsGz12Pftcdi9m53DeUShxtJA9puwvjYh`, diff --git a/packages/viem-account-ledger/src/ledger-to-account.ts b/packages/viem-account-ledger/src/ledger-to-account.ts index 3c8e1df05..c621270a7 100644 --- a/packages/viem-account-ledger/src/ledger-to-account.ts +++ b/packages/viem-account-ledger/src/ledger-to-account.ts @@ -7,12 +7,21 @@ import { CeloTransactionSerializable, serializeTransaction } from 'viem/celo' import { checkForKnownToken, generateLedger } from './utils.js' -type LedgerAccount = LocalAccount<'ledger'> +export type LedgerAccount = LocalAccount<'ledger'> export const ETH_DERIVATION_PATH_BASE = "m/44'/60'/0'" as const export const CELO_BASE_DERIVATION_PATH = `${CELO_DERIVATION_PATH_BASE.slice(2)}/0` export const DEFAULT_DERIVATION_PATH = `${ETH_DERIVATION_PATH_BASE.slice(2)}/0` +/** + * A function to create a ledger account for viem + * @param options + * @param options.transport a Ledger Transport + * @param options.derivationPathIndex aka addressIndex + * @param options.baseDerivationPath defaults to "m/44'/60'/0" + * + * @returns a viem LocalAccount<"ledger"> + */ export async function ledgerToAccount({ transport, derivationPathIndex = 0, diff --git a/packages/viem-account-ledger/src/types.ts b/packages/viem-account-ledger/src/types.ts index 0a1099279..9fd99c9a7 100644 --- a/packages/viem-account-ledger/src/types.ts +++ b/packages/viem-account-ledger/src/types.ts @@ -1 +1,2 @@ +/** @internal */ export type Hex = `0x${string}` diff --git a/packages/viem-account-ledger/typedoc.json b/packages/viem-account-ledger/typedoc.json index 27e4b830b..c18df7f9e 100644 --- a/packages/viem-account-ledger/typedoc.json +++ b/packages/viem-account-ledger/typedoc.json @@ -5,8 +5,9 @@ "hideGenerator": true, "out": "../docs/viem-account-ledger", "gitRevision": "master", - "readme": "none", - "entryPoints": ["./src"], + "readme": "./README.md", + "entryPoints": ["./src/index.ts", "./src/ledger-to-account.ts"], + "excludeInternal": true, "githubPages": false, "plugin": ["typedoc-plugin-markdown"], "entryPointStrategy": "expand" From 38fe4d018d1b9ed5954a17501bdaa59b0aeec2f2 Mon Sep 17 00:00:00 2001 From: Leszek Stachowski Date: Wed, 23 Oct 2024 17:03:53 +0200 Subject: [PATCH 13/54] Remove deprecations (#400) --- .changeset/calm-sheep-tie.md | 5 + .changeset/smart-guests-refuse.md | 5 + .../contractkit/classes/kit.ContractKit.md | 68 +++++----- .../wrappers_BaseSlasher.BaseSlasher.md | 2 +- ...perForGoverning.BaseWrapperForGoverning.md | 2 +- ...ningSlasher.DoubleSigningSlasherWrapper.md | 2 +- ..._DowntimeSlasher.DowntimeSlasherWrapper.md | 14 +- .../wrappers_Election.ElectionWrapper.md | 4 +- ...appers_EpochManager.EpochManagerWrapper.md | 53 ++++++-- ...ppers_GoldTokenWrapper.GoldTokenWrapper.md | 2 +- .../wrappers_Governance.GovernanceWrapper.md | 4 +- .../wrappers_LockedGold.LockedGoldWrapper.md | 2 +- ...wrappers_ReleaseGold.ReleaseGoldWrapper.md | 2 +- ...appers_ScoreManager.ScoreManagerWrapper.md | 5 +- .../wrappers_Validators.ValidatorsWrapper.md | 4 +- .../modules/wrappers_DowntimeSlasher.md | 2 +- .../modules/wrappers_EpochManager.md | 2 +- .../commands/governance/approve-l2.test.ts | 10 +- .../src/commands/governance/approve.test.ts | 8 +- .../__snapshots__/contracts-l2.test.ts.snap | 128 +++++++++--------- .../__snapshots__/contracts.test.ts.snap | 128 +++++++++--------- packages/cli/src/commands/network/info.ts | 3 +- .../commands/network/parameters-l2.test.ts | 10 +- .../src/commands/network/parameters.test.ts | 4 +- .../src/commands/network/whitelist-l2.test.ts | 26 ++-- .../src/commands/network/whitelist.test.ts | 6 +- .../cli/src/commands/transfer/celo.test.ts | 6 +- packages/dev-utils/package.json | 2 +- packages/sdk/contractkit/package.json | 2 +- packages/sdk/contractkit/src/kit-l2.test.ts | 70 +++++++++- packages/sdk/contractkit/src/kit.test.ts | 15 ++ packages/sdk/contractkit/src/kit.ts | 65 ++++++--- .../src/wrappers/BaseWrapperForGoverning.ts | 2 + .../src/wrappers/DowntimeSlasher-l2.test.ts | 36 +++++ .../src/wrappers/DowntimeSlasher.test.ts | 23 ++++ .../src/wrappers/DowntimeSlasher.ts | 14 +- .../src/wrappers/EpochManager.test.ts | 13 +- .../contractkit/src/wrappers/EpochManager.ts | 9 +- .../FeeCurrencyDirectoryWrapper.test.ts | 30 ++-- .../FeeCurrencyWhitelistWrapper.test.ts | 14 +- .../src/wrappers/Governance-l2.test.ts | 6 +- .../src/wrappers/Governance.test.ts | 10 +- .../contractkit/src/wrappers/Governance.ts | 2 +- .../src/wrappers/ScoreManager.test.ts | 2 +- yarn.lock | 20 +-- 45 files changed, 532 insertions(+), 310 deletions(-) create mode 100644 .changeset/calm-sheep-tie.md create mode 100644 .changeset/smart-guests-refuse.md create mode 100644 packages/sdk/contractkit/src/wrappers/DowntimeSlasher-l2.test.ts create mode 100644 packages/sdk/contractkit/src/wrappers/DowntimeSlasher.test.ts diff --git a/.changeset/calm-sheep-tie.md b/.changeset/calm-sheep-tie.md new file mode 100644 index 000000000..f4c719d15 --- /dev/null +++ b/.changeset/calm-sheep-tie.md @@ -0,0 +1,5 @@ +--- +'@celo/dev-utils': patch +--- + +Upgrades to latest devchain diff --git a/.changeset/smart-guests-refuse.md b/.changeset/smart-guests-refuse.md new file mode 100644 index 000000000..64d3c76cc --- /dev/null +++ b/.changeset/smart-guests-refuse.md @@ -0,0 +1,5 @@ +--- +'@celo/contractkit': patch +--- + +Renames `getElected` and its usages to `getElectedAccounts` for `EpochManagerWrapper` diff --git a/docs/sdk/contractkit/classes/kit.ContractKit.md b/docs/sdk/contractkit/classes/kit.ContractKit.md index 1140719a7..b1a31bc57 100644 --- a/docs/sdk/contractkit/classes/kit.ContractKit.md +++ b/docs/sdk/contractkit/classes/kit.ContractKit.md @@ -65,7 +65,7 @@ #### Defined in -[packages/sdk/contractkit/src/kit.ts:114](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/kit.ts#L114) +[packages/sdk/contractkit/src/kit.ts:115](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/kit.ts#L115) ## Properties @@ -77,7 +77,7 @@ factory for core contract's native web3 wrappers #### Defined in -[packages/sdk/contractkit/src/kit.ts:105](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/kit.ts#L105) +[packages/sdk/contractkit/src/kit.ts:106](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/kit.ts#L106) ___ @@ -89,7 +89,7 @@ helper for interacting with CELO & stable tokens #### Defined in -[packages/sdk/contractkit/src/kit.ts:109](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/kit.ts#L109) +[packages/sdk/contractkit/src/kit.ts:110](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/kit.ts#L110) ___ @@ -99,7 +99,7 @@ ___ #### Defined in -[packages/sdk/contractkit/src/kit.ts:114](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/kit.ts#L114) +[packages/sdk/contractkit/src/kit.ts:115](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/kit.ts#L115) ___ @@ -111,7 +111,7 @@ factory for core contract's kit wrappers #### Defined in -[packages/sdk/contractkit/src/kit.ts:107](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/kit.ts#L107) +[packages/sdk/contractkit/src/kit.ts:108](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/kit.ts#L108) ___ @@ -125,7 +125,7 @@ no longer needed since gasPrice is available on node rpc #### Defined in -[packages/sdk/contractkit/src/kit.ts:112](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/kit.ts#L112) +[packages/sdk/contractkit/src/kit.ts:113](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/kit.ts#L113) ___ @@ -137,7 +137,7 @@ core contract's address registry #### Defined in -[packages/sdk/contractkit/src/kit.ts:103](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/kit.ts#L103) +[packages/sdk/contractkit/src/kit.ts:104](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/kit.ts#L104) ## Accessors @@ -151,7 +151,7 @@ core contract's address registry #### Defined in -[packages/sdk/contractkit/src/kit.ts:332](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/kit.ts#L332) +[packages/sdk/contractkit/src/kit.ts:359](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/kit.ts#L359) • `set` **defaultAccount**(`address`): `void` @@ -167,7 +167,7 @@ core contract's address registry #### Defined in -[packages/sdk/contractkit/src/kit.ts:328](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/kit.ts#L328) +[packages/sdk/contractkit/src/kit.ts:355](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/kit.ts#L355) ___ @@ -181,7 +181,7 @@ ___ #### Defined in -[packages/sdk/contractkit/src/kit.ts:348](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/kit.ts#L348) +[packages/sdk/contractkit/src/kit.ts:375](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/kit.ts#L375) • `set` **defaultFeeCurrency**(`address`): `void` @@ -197,7 +197,7 @@ ___ #### Defined in -[packages/sdk/contractkit/src/kit.ts:344](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/kit.ts#L344) +[packages/sdk/contractkit/src/kit.ts:371](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/kit.ts#L371) ___ @@ -211,7 +211,7 @@ ___ #### Defined in -[packages/sdk/contractkit/src/kit.ts:340](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/kit.ts#L340) +[packages/sdk/contractkit/src/kit.ts:367](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/kit.ts#L367) • `set` **gasInflationFactor**(`factor`): `void` @@ -227,7 +227,7 @@ ___ #### Defined in -[packages/sdk/contractkit/src/kit.ts:336](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/kit.ts#L336) +[packages/sdk/contractkit/src/kit.ts:363](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/kit.ts#L363) ___ @@ -241,7 +241,7 @@ ___ #### Defined in -[packages/sdk/contractkit/src/kit.ts:379](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/kit.ts#L379) +[packages/sdk/contractkit/src/kit.ts:406](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/kit.ts#L406) ## Methods @@ -261,7 +261,7 @@ ___ #### Defined in -[packages/sdk/contractkit/src/kit.ts:324](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/kit.ts#L324) +[packages/sdk/contractkit/src/kit.ts:351](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/kit.ts#L351) ___ @@ -291,7 +291,7 @@ https://github.com/celo-org/celo-proposals/blob/master/CIPs/cip-0066.md #### Defined in -[packages/sdk/contractkit/src/kit.ts:298](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/kit.ts#L298) +[packages/sdk/contractkit/src/kit.ts:325](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/kit.ts#L325) ___ @@ -311,7 +311,7 @@ ___ #### Defined in -[packages/sdk/contractkit/src/kit.ts:244](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/kit.ts#L244) +[packages/sdk/contractkit/src/kit.ts:260](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/kit.ts#L260) ___ @@ -319,13 +319,17 @@ ___ ▸ **getEpochSize**(): `Promise`\<`number`\> +This method returns for: +- L1: epoch size (in blocks) +- L2: epoch duration (in seconds) + #### Returns `Promise`\<`number`\> #### Defined in -[packages/sdk/contractkit/src/kit.ts:220](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/kit.ts#L220) +[packages/sdk/contractkit/src/kit.ts:224](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/kit.ts#L224) ___ @@ -345,7 +349,7 @@ ___ #### Defined in -[packages/sdk/contractkit/src/kit.ts:228](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/kit.ts#L228) +[packages/sdk/contractkit/src/kit.ts:236](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/kit.ts#L236) ___ @@ -359,7 +363,7 @@ ___ #### Defined in -[packages/sdk/contractkit/src/kit.ts:204](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/kit.ts#L204) +[packages/sdk/contractkit/src/kit.ts:205](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/kit.ts#L205) ___ @@ -379,7 +383,7 @@ ___ #### Defined in -[packages/sdk/contractkit/src/kit.ts:236](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/kit.ts#L236) +[packages/sdk/contractkit/src/kit.ts:248](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/kit.ts#L248) ___ @@ -399,7 +403,7 @@ ___ #### Defined in -[packages/sdk/contractkit/src/kit.ts:142](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/kit.ts#L142) +[packages/sdk/contractkit/src/kit.ts:143](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/kit.ts#L143) ___ @@ -419,7 +423,7 @@ ___ #### Defined in -[packages/sdk/contractkit/src/kit.ts:125](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/kit.ts#L125) +[packages/sdk/contractkit/src/kit.ts:126](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/kit.ts#L126) ___ @@ -433,7 +437,7 @@ ___ #### Defined in -[packages/sdk/contractkit/src/kit.ts:121](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/kit.ts#L121) +[packages/sdk/contractkit/src/kit.ts:122](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/kit.ts#L122) ___ @@ -447,7 +451,7 @@ ___ #### Defined in -[packages/sdk/contractkit/src/kit.ts:352](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/kit.ts#L352) +[packages/sdk/contractkit/src/kit.ts:379](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/kit.ts#L379) ___ @@ -461,7 +465,7 @@ ___ #### Defined in -[packages/sdk/contractkit/src/kit.ts:356](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/kit.ts#L356) +[packages/sdk/contractkit/src/kit.ts:383](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/kit.ts#L383) ___ @@ -481,7 +485,7 @@ ___ #### Defined in -[packages/sdk/contractkit/src/kit.ts:261](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/kit.ts#L261) +[packages/sdk/contractkit/src/kit.ts:288](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/kit.ts#L288) ___ @@ -501,7 +505,7 @@ ___ #### Defined in -[packages/sdk/contractkit/src/kit.ts:360](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/kit.ts#L360) +[packages/sdk/contractkit/src/kit.ts:387](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/kit.ts#L387) ___ @@ -522,7 +526,7 @@ ___ #### Defined in -[packages/sdk/contractkit/src/kit.ts:364](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/kit.ts#L364) +[packages/sdk/contractkit/src/kit.ts:391](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/kit.ts#L391) ___ @@ -548,7 +552,7 @@ Throws if supplied address is not a valid hexadecimal address #### Defined in -[packages/sdk/contractkit/src/kit.ts:211](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/kit.ts#L211) +[packages/sdk/contractkit/src/kit.ts:212](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/kit.ts#L212) ___ @@ -569,7 +573,7 @@ ___ #### Defined in -[packages/sdk/contractkit/src/kit.ts:371](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/kit.ts#L371) +[packages/sdk/contractkit/src/kit.ts:398](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/kit.ts#L398) ___ @@ -583,4 +587,4 @@ ___ #### Defined in -[packages/sdk/contractkit/src/kit.ts:375](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/kit.ts#L375) +[packages/sdk/contractkit/src/kit.ts:402](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/kit.ts#L402) diff --git a/docs/sdk/contractkit/classes/wrappers_BaseSlasher.BaseSlasher.md b/docs/sdk/contractkit/classes/wrappers_BaseSlasher.BaseSlasher.md index bde760a55..88f08e4a4 100644 --- a/docs/sdk/contractkit/classes/wrappers_BaseSlasher.BaseSlasher.md +++ b/docs/sdk/contractkit/classes/wrappers_BaseSlasher.BaseSlasher.md @@ -72,7 +72,7 @@ #### Defined in -[packages/sdk/contractkit/src/wrappers/BaseWrapperForGoverning.ts:23](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/wrappers/BaseWrapperForGoverning.ts#L23) +[packages/sdk/contractkit/src/wrappers/BaseWrapperForGoverning.ts:25](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/wrappers/BaseWrapperForGoverning.ts#L25) ## Properties diff --git a/docs/sdk/contractkit/classes/wrappers_BaseWrapperForGoverning.BaseWrapperForGoverning.md b/docs/sdk/contractkit/classes/wrappers_BaseWrapperForGoverning.BaseWrapperForGoverning.md index 7f817922f..e70a92e0a 100644 --- a/docs/sdk/contractkit/classes/wrappers_BaseWrapperForGoverning.BaseWrapperForGoverning.md +++ b/docs/sdk/contractkit/classes/wrappers_BaseWrapperForGoverning.BaseWrapperForGoverning.md @@ -81,7 +81,7 @@ #### Defined in -[packages/sdk/contractkit/src/wrappers/BaseWrapperForGoverning.ts:23](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/wrappers/BaseWrapperForGoverning.ts#L23) +[packages/sdk/contractkit/src/wrappers/BaseWrapperForGoverning.ts:25](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/wrappers/BaseWrapperForGoverning.ts#L25) ## Properties diff --git a/docs/sdk/contractkit/classes/wrappers_DoubleSigningSlasher.DoubleSigningSlasherWrapper.md b/docs/sdk/contractkit/classes/wrappers_DoubleSigningSlasher.DoubleSigningSlasherWrapper.md index 45052165c..881aa1e7b 100644 --- a/docs/sdk/contractkit/classes/wrappers_DoubleSigningSlasher.DoubleSigningSlasherWrapper.md +++ b/docs/sdk/contractkit/classes/wrappers_DoubleSigningSlasher.DoubleSigningSlasherWrapper.md @@ -61,7 +61,7 @@ Contract handling slashing for Validator double-signing #### Defined in -[packages/sdk/contractkit/src/wrappers/BaseWrapperForGoverning.ts:23](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/wrappers/BaseWrapperForGoverning.ts#L23) +[packages/sdk/contractkit/src/wrappers/BaseWrapperForGoverning.ts:25](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/wrappers/BaseWrapperForGoverning.ts#L25) ## Properties diff --git a/docs/sdk/contractkit/classes/wrappers_DowntimeSlasher.DowntimeSlasherWrapper.md b/docs/sdk/contractkit/classes/wrappers_DowntimeSlasher.DowntimeSlasherWrapper.md index 56a824a74..371d073e3 100644 --- a/docs/sdk/contractkit/classes/wrappers_DowntimeSlasher.DowntimeSlasherWrapper.md +++ b/docs/sdk/contractkit/classes/wrappers_DowntimeSlasher.DowntimeSlasherWrapper.md @@ -70,7 +70,7 @@ Contract handling slashing for Validator downtime using intervals. #### Defined in -[packages/sdk/contractkit/src/wrappers/BaseWrapperForGoverning.ts:23](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/wrappers/BaseWrapperForGoverning.ts#L23) +[packages/sdk/contractkit/src/wrappers/BaseWrapperForGoverning.ts:25](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/wrappers/BaseWrapperForGoverning.ts#L25) ## Properties @@ -205,7 +205,7 @@ the specific interval. #### Defined in -[packages/sdk/contractkit/src/wrappers/DowntimeSlasher.ts:126](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/wrappers/DowntimeSlasher.ts#L126) +[packages/sdk/contractkit/src/wrappers/DowntimeSlasher.ts:132](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/wrappers/DowntimeSlasher.ts#L132) ___ @@ -229,7 +229,7 @@ ___ #### Defined in -[packages/sdk/contractkit/src/wrappers/DowntimeSlasher.ts:140](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/wrappers/DowntimeSlasher.ts#L140) +[packages/sdk/contractkit/src/wrappers/DowntimeSlasher.ts:146](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/wrappers/DowntimeSlasher.ts#L146) ___ @@ -457,7 +457,7 @@ True if the user already called the `setBitmapForInterval` for intervals. #### Defined in -[packages/sdk/contractkit/src/wrappers/DowntimeSlasher.ts:133](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/wrappers/DowntimeSlasher.ts#L133) +[packages/sdk/contractkit/src/wrappers/DowntimeSlasher.ts:139](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/wrappers/DowntimeSlasher.ts#L139) ___ @@ -481,7 +481,7 @@ intervals. #### Defined in -[packages/sdk/contractkit/src/wrappers/DowntimeSlasher.ts:174](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/wrappers/DowntimeSlasher.ts#L174) +[packages/sdk/contractkit/src/wrappers/DowntimeSlasher.ts:180](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/wrappers/DowntimeSlasher.ts#L180) ___ @@ -551,7 +551,7 @@ Tests if the given validator or signer did not sign any blocks in the interval. #### Defined in -[packages/sdk/contractkit/src/wrappers/DowntimeSlasher.ts:147](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/wrappers/DowntimeSlasher.ts#L147) +[packages/sdk/contractkit/src/wrappers/DowntimeSlasher.ts:153](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/wrappers/DowntimeSlasher.ts#L153) ___ @@ -577,4 +577,4 @@ True if the validator signature does not appear in any block within the window. #### Defined in -[packages/sdk/contractkit/src/wrappers/DowntimeSlasher.ts:161](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/wrappers/DowntimeSlasher.ts#L161) +[packages/sdk/contractkit/src/wrappers/DowntimeSlasher.ts:167](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/wrappers/DowntimeSlasher.ts#L167) diff --git a/docs/sdk/contractkit/classes/wrappers_Election.ElectionWrapper.md b/docs/sdk/contractkit/classes/wrappers_Election.ElectionWrapper.md index cc5d410ce..bf293d8b1 100644 --- a/docs/sdk/contractkit/classes/wrappers_Election.ElectionWrapper.md +++ b/docs/sdk/contractkit/classes/wrappers_Election.ElectionWrapper.md @@ -91,7 +91,7 @@ Contract for voting for validators and managing validator groups. #### Defined in -[packages/sdk/contractkit/src/wrappers/BaseWrapperForGoverning.ts:23](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/wrappers/BaseWrapperForGoverning.ts#L23) +[packages/sdk/contractkit/src/wrappers/BaseWrapperForGoverning.ts:25](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/wrappers/BaseWrapperForGoverning.ts#L25) ## Properties @@ -325,7 +325,7 @@ ___ ### methodIds -• **methodIds**: `Record`\<``"electableValidators"`` \| ``"electabilityThreshold"`` \| ``"maxNumGroupsVotedFor"`` \| ``"checkProofOfPossession"`` \| ``"fractionMulExp"`` \| ``"getBlockNumberFromHeader"`` \| ``"getEpochNumber"`` \| ``"getEpochNumberOfBlock"`` \| ``"getEpochSize"`` \| ``"getParentSealBitmap"`` \| ``"getVerifiedSealBitmapFromHeader"`` \| ``"hashHeader"`` \| ``"initialized"`` \| ``"isL2"`` \| ``"isOwner"`` \| ``"minQuorumSize"`` \| ``"minQuorumSizeInCurrentSet"`` \| ``"numberValidatorsInCurrentSet"`` \| ``"numberValidatorsInSet"`` \| ``"owner"`` \| ``"registry"`` \| ``"renounceOwnership"`` \| ``"setRegistry"`` \| ``"transferOwnership"`` \| ``"validatorSignerAddressFromCurrentSet"`` \| ``"validatorSignerAddressFromSet"`` \| ``"initialize"`` \| ``"vote"`` \| ``"getVersionNumber"`` \| ``"isBlocked"`` \| ``"allowedToVoteOverMaxNumberOfGroups"`` \| ``"cachedVotesByAccount"`` \| ``"getBlockedbyContract"`` \| ``"activate"`` \| ``"activateForAccount"`` \| ``"revokePending"`` \| ``"revokeAllActive"`` \| ``"revokeActive"`` \| ``"distributeEpochRewards"`` \| ``"markGroupIneligible"`` \| ``"markGroupEligible"`` \| ``"forceDecrementVotes"`` \| ``"setBlockedByContract"`` \| ``"getGroupsVotedForByAccount"`` \| ``"getNumVotesReceivable"`` \| ``"getEligibleValidatorGroups"`` \| ``"getTotalVotesForEligibleValidatorGroups"`` \| ``"electValidatorSigners"`` \| ``"electValidatorAccounts"`` \| ``"getTotalVotesByAccount"`` \| ``"getActiveVoteUnitsForGroupByAccount"`` \| ``"getActiveVoteUnitsForGroup"`` \| ``"getGroupEligibility"`` \| ``"getGroupEpochRewards"`` \| ``"getGroupEpochRewardsBasedOnScore"`` \| ``"hasActivatablePendingVotes"`` \| ``"getElectabilityThreshold"`` \| ``"getElectableValidators"`` \| ``"setElectableValidators"`` \| ``"setMaxNumGroupsVotedFor"`` \| ``"setElectabilityThreshold"`` \| ``"updateTotalVotesByAccountForGroup"`` \| ``"setAllowedToVoteOverMaxNumberOfGroups"`` \| ``"canReceiveVotes"`` \| ``"getTotalVotes"`` \| ``"getActiveVotes"`` \| ``"electNValidatorSigners"`` \| ``"electNValidatorAccounts"`` \| ``"getCurrentValidatorSigners"`` \| ``"getPendingVotesForGroupByAccount"`` \| ``"getActiveVotesForGroupByAccount"`` \| ``"getTotalVotesForGroupByAccount"`` \| ``"getTotalVotesForGroup"`` \| ``"getActiveVotesForGroup"`` \| ``"getPendingVotesForGroup"``, `string`\> +• **methodIds**: `Record`\<``"electableValidators"`` \| ``"electabilityThreshold"`` \| ``"maxNumGroupsVotedFor"`` \| ``"checkProofOfPossession"`` \| ``"fractionMulExp"`` \| ``"getBlockNumberFromHeader"`` \| ``"getEpochNumber"`` \| ``"getEpochNumberOfBlock"`` \| ``"getEpochSize"`` \| ``"getParentSealBitmap"`` \| ``"getVerifiedSealBitmapFromHeader"`` \| ``"hashHeader"`` \| ``"initialized"`` \| ``"isOwner"`` \| ``"minQuorumSize"`` \| ``"minQuorumSizeInCurrentSet"`` \| ``"numberValidatorsInCurrentSet"`` \| ``"numberValidatorsInSet"`` \| ``"owner"`` \| ``"registry"`` \| ``"renounceOwnership"`` \| ``"setRegistry"`` \| ``"transferOwnership"`` \| ``"validatorAddressFromCurrentSet"`` \| ``"validatorSignerAddressFromCurrentSet"`` \| ``"validatorSignerAddressFromSet"`` \| ``"initialize"`` \| ``"vote"`` \| ``"getVersionNumber"`` \| ``"isBlocked"`` \| ``"allowedToVoteOverMaxNumberOfGroups"`` \| ``"cachedVotesByAccount"`` \| ``"getBlockedByContract"`` \| ``"activate"`` \| ``"activateForAccount"`` \| ``"revokePending"`` \| ``"revokeAllActive"`` \| ``"revokeActive"`` \| ``"distributeEpochRewards"`` \| ``"markGroupIneligible"`` \| ``"markGroupEligible"`` \| ``"forceDecrementVotes"`` \| ``"setBlockedByContract"`` \| ``"getGroupsVotedForByAccount"`` \| ``"getNumVotesReceivable"`` \| ``"getEligibleValidatorGroups"`` \| ``"getTotalVotesForEligibleValidatorGroups"`` \| ``"electValidatorSigners"`` \| ``"electValidatorAccounts"`` \| ``"getTotalVotesByAccount"`` \| ``"getActiveVoteUnitsForGroupByAccount"`` \| ``"getActiveVoteUnitsForGroup"`` \| ``"getGroupEligibility"`` \| ``"getGroupEpochRewards"`` \| ``"getGroupEpochRewardsBasedOnScore"`` \| ``"hasActivatablePendingVotes"`` \| ``"getElectabilityThreshold"`` \| ``"getElectableValidators"`` \| ``"setElectableValidators"`` \| ``"setMaxNumGroupsVotedFor"`` \| ``"setElectabilityThreshold"`` \| ``"updateTotalVotesByAccountForGroup"`` \| ``"setAllowedToVoteOverMaxNumberOfGroups"`` \| ``"canReceiveVotes"`` \| ``"getTotalVotes"`` \| ``"getActiveVotes"`` \| ``"electNValidatorSigners"`` \| ``"electNValidatorAccounts"`` \| ``"getCurrentValidatorSigners"`` \| ``"getPendingVotesForGroupByAccount"`` \| ``"getActiveVotesForGroupByAccount"`` \| ``"getTotalVotesForGroupByAccount"`` \| ``"getTotalVotesForGroup"`` \| ``"getActiveVotesForGroup"`` \| ``"getPendingVotesForGroup"``, `string`\> #### Inherited from diff --git a/docs/sdk/contractkit/classes/wrappers_EpochManager.EpochManagerWrapper.md b/docs/sdk/contractkit/classes/wrappers_EpochManager.EpochManagerWrapper.md index 0eeb96a0b..931f2b94e 100644 --- a/docs/sdk/contractkit/classes/wrappers_EpochManager.EpochManagerWrapper.md +++ b/docs/sdk/contractkit/classes/wrappers_EpochManager.EpochManagerWrapper.md @@ -26,7 +26,8 @@ Contract handling epoch management. - [finishNextEpochProcess](wrappers_EpochManager.EpochManagerWrapper.md#finishnextepochprocess) - [firstKnownEpoch](wrappers_EpochManager.EpochManagerWrapper.md#firstknownepoch) - [getCurrentEpochNumber](wrappers_EpochManager.EpochManagerWrapper.md#getcurrentepochnumber) -- [getElected](wrappers_EpochManager.EpochManagerWrapper.md#getelected) +- [getElectedAccounts](wrappers_EpochManager.EpochManagerWrapper.md#getelectedaccounts) +- [getEpochNumberOfBlock](wrappers_EpochManager.EpochManagerWrapper.md#getepochnumberofblock) - [getEpochProcessingStatus](wrappers_EpochManager.EpochManagerWrapper.md#getepochprocessingstatus) - [getFirstBlockAtEpoch](wrappers_EpochManager.EpochManagerWrapper.md#getfirstblockatepoch) - [getLastBlockAtEpoch](wrappers_EpochManager.EpochManagerWrapper.md#getlastblockatepoch) @@ -71,7 +72,7 @@ Contract handling epoch management. #### Defined in -[packages/sdk/contractkit/src/wrappers/BaseWrapperForGoverning.ts:23](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/wrappers/BaseWrapperForGoverning.ts#L23) +[packages/sdk/contractkit/src/wrappers/BaseWrapperForGoverning.ts:25](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/wrappers/BaseWrapperForGoverning.ts#L25) ## Properties @@ -160,7 +161,7 @@ ___ #### Defined in -[packages/sdk/contractkit/src/wrappers/EpochManager.ts:61](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/wrappers/EpochManager.ts#L61) +[packages/sdk/contractkit/src/wrappers/EpochManager.ts:66](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/wrappers/EpochManager.ts#L66) ___ @@ -212,9 +213,9 @@ ___ ___ -### getElected +### getElectedAccounts -• **getElected**: (...`args`: []) => `Promise`\<`string`[]\> +• **getElectedAccounts**: (...`args`: []) => `Promise`\<`string`[]\> #### Type declaration @@ -232,7 +233,31 @@ ___ #### Defined in -[packages/sdk/contractkit/src/wrappers/EpochManager.ts:45](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/wrappers/EpochManager.ts#L45) +[packages/sdk/contractkit/src/wrappers/EpochManager.ts:50](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/wrappers/EpochManager.ts#L50) + +___ + +### getEpochNumberOfBlock + +• **getEpochNumberOfBlock**: (...`args`: [\_blockNumber: string \| number]) => `Promise`\<`number`\> + +#### Type declaration + +▸ (`...args`): `Promise`\<`number`\> + +##### Parameters + +| Name | Type | +| :------ | :------ | +| `...args` | [\_blockNumber: string \| number] | + +##### Returns + +`Promise`\<`number`\> + +#### Defined in + +[packages/sdk/contractkit/src/wrappers/EpochManager.ts:43](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/wrappers/EpochManager.ts#L43) ___ @@ -256,7 +281,7 @@ ___ #### Defined in -[packages/sdk/contractkit/src/wrappers/EpochManager.ts:46](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/wrappers/EpochManager.ts#L46) +[packages/sdk/contractkit/src/wrappers/EpochManager.ts:51](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/wrappers/EpochManager.ts#L51) ___ @@ -328,7 +353,7 @@ ___ #### Defined in -[packages/sdk/contractkit/src/wrappers/EpochManager.ts:43](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/wrappers/EpochManager.ts#L43) +[packages/sdk/contractkit/src/wrappers/EpochManager.ts:48](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/wrappers/EpochManager.ts#L48) ___ @@ -352,13 +377,13 @@ ___ #### Defined in -[packages/sdk/contractkit/src/wrappers/EpochManager.ts:44](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/wrappers/EpochManager.ts#L44) +[packages/sdk/contractkit/src/wrappers/EpochManager.ts:49](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/wrappers/EpochManager.ts#L49) ___ ### methodIds -• **methodIds**: `Record`\<``"epochDuration"`` \| ``"isTimeForNextEpoch"`` \| ``"initialized"`` \| ``"owner"`` \| ``"registry"`` \| ``"renounceOwnership"`` \| ``"setRegistry"`` \| ``"transferOwnership"`` \| ``"initialize"`` \| ``"getVersionNumber"`` \| ``"elected"`` \| ``"epochProcessing"`` \| ``"firstKnownEpoch"`` \| ``"isSystemInitialized"`` \| ``"oracleAddress"`` \| ``"processedGroups"`` \| ``"validatorPendingPayments"`` \| ``"initializeSystem"`` \| ``"startNextEpochProcess"`` \| ``"finishNextEpochProcess"`` \| ``"sendValidatorPayment"`` \| ``"getCurrentEpoch"`` \| ``"getCurrentEpochNumber"`` \| ``"getEpochProcessingState"`` \| ``"isBlocked"`` \| ``"getElected"`` \| ``"getFirstBlockAtEpoch"`` \| ``"getLastBlockAtEpoch"`` \| ``"setEpochDuration"`` \| ``"setOracleAddress"`` \| ``"isOnEpochProcess"`` \| ``"systemAlreadyInitialized"``, `string`\> +• **methodIds**: `Record`\<``"epochDuration"`` \| ``"isTimeForNextEpoch"`` \| ``"getEpochNumberOfBlock"`` \| ``"initialized"`` \| ``"owner"`` \| ``"registry"`` \| ``"renounceOwnership"`` \| ``"setRegistry"`` \| ``"transferOwnership"`` \| ``"initialize"`` \| ``"getVersionNumber"`` \| ``"electedAccounts"`` \| ``"electedSigners"`` \| ``"epochProcessing"`` \| ``"firstKnownEpoch"`` \| ``"isSystemInitialized"`` \| ``"oracleAddress"`` \| ``"processedGroups"`` \| ``"toProcessGroups"`` \| ``"validatorPendingPayments"`` \| ``"initializeSystem"`` \| ``"startNextEpochProcess"`` \| ``"setToProcessGroups"`` \| ``"processGroups"`` \| ``"processGroup"`` \| ``"finishNextEpochProcess"`` \| ``"sendValidatorPayment"`` \| ``"getCurrentEpoch"`` \| ``"getCurrentEpochNumber"`` \| ``"getEpochProcessingState"`` \| ``"isBlocked"`` \| ``"numberOfElectedInCurrentSet"`` \| ``"getElectedAccounts"`` \| ``"getElectedAccountByIndex"`` \| ``"getElectedSigners"`` \| ``"getElectedSignerByIndex"`` \| ``"getFirstBlockAtEpoch"`` \| ``"getLastBlockAtEpoch"`` \| ``"getEpochByBlockNumber"`` \| ``"setEpochDuration"`` \| ``"setOracleAddress"`` \| ``"isOnEpochProcess"`` \| ``"systemAlreadyInitialized"`` \| ``"getEpochByNumber"``, `string`\> #### Inherited from @@ -390,7 +415,7 @@ ___ #### Defined in -[packages/sdk/contractkit/src/wrappers/EpochManager.ts:60](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/wrappers/EpochManager.ts#L60) +[packages/sdk/contractkit/src/wrappers/EpochManager.ts:65](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/wrappers/EpochManager.ts#L65) ## Accessors @@ -424,7 +449,7 @@ BaseWrapperForGoverning.address #### Defined in -[packages/sdk/contractkit/src/wrappers/EpochManager.ts:63](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/wrappers/EpochManager.ts#L63) +[packages/sdk/contractkit/src/wrappers/EpochManager.ts:68](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/wrappers/EpochManager.ts#L68) ___ @@ -438,7 +463,7 @@ ___ #### Defined in -[packages/sdk/contractkit/src/wrappers/EpochManager.ts:125](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/wrappers/EpochManager.ts#L125) +[packages/sdk/contractkit/src/wrappers/EpochManager.ts:130](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/wrappers/EpochManager.ts#L130) ___ @@ -458,7 +483,7 @@ ___ #### Defined in -[packages/sdk/contractkit/src/wrappers/EpochManager.ts:76](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/wrappers/EpochManager.ts#L76) +[packages/sdk/contractkit/src/wrappers/EpochManager.ts:81](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/wrappers/EpochManager.ts#L81) ___ diff --git a/docs/sdk/contractkit/classes/wrappers_GoldTokenWrapper.GoldTokenWrapper.md b/docs/sdk/contractkit/classes/wrappers_GoldTokenWrapper.GoldTokenWrapper.md index 5d2dd152b..6a4d12d5f 100644 --- a/docs/sdk/contractkit/classes/wrappers_GoldTokenWrapper.GoldTokenWrapper.md +++ b/docs/sdk/contractkit/classes/wrappers_GoldTokenWrapper.GoldTokenWrapper.md @@ -307,7 +307,7 @@ ___ ### methodIds -• **methodIds**: `Record`\<``"symbol"`` \| ``"name"`` \| ``"decimals"`` \| ``"initialized"`` \| ``"isL2"`` \| ``"isOwner"`` \| ``"owner"`` \| ``"registry"`` \| ``"renounceOwnership"`` \| ``"setRegistry"`` \| ``"transferOwnership"`` \| ``"initialize"`` \| ``"approve"`` \| ``"getVersionNumber"`` \| ``"transfer"`` \| ``"increaseAllowance"`` \| ``"decreaseAllowance"`` \| ``"mint"`` \| ``"transferWithComment"`` \| ``"burn"`` \| ``"transferFrom"`` \| ``"allowance"`` \| ``"balanceOf"`` \| ``"totalSupply"`` \| ``"increaseSupply"`` \| ``"circulatingSupply"`` \| ``"getBurnedAmount"`` \| ``"allocatedSupply"``, `string`\> +• **methodIds**: `Record`\<``"symbol"`` \| ``"name"`` \| ``"decimals"`` \| ``"initialized"`` \| ``"isOwner"`` \| ``"owner"`` \| ``"registry"`` \| ``"renounceOwnership"`` \| ``"setRegistry"`` \| ``"transferOwnership"`` \| ``"initialize"`` \| ``"approve"`` \| ``"getVersionNumber"`` \| ``"transfer"`` \| ``"increaseAllowance"`` \| ``"decreaseAllowance"`` \| ``"mint"`` \| ``"transferWithComment"`` \| ``"burn"`` \| ``"transferFrom"`` \| ``"allowance"`` \| ``"balanceOf"`` \| ``"totalSupply"`` \| ``"increaseSupply"`` \| ``"circulatingSupply"`` \| ``"getBurnedAmount"`` \| ``"allocatedSupply"``, `string`\> #### Inherited from diff --git a/docs/sdk/contractkit/classes/wrappers_Governance.GovernanceWrapper.md b/docs/sdk/contractkit/classes/wrappers_Governance.GovernanceWrapper.md index 3d6f8409a..14a787fd0 100644 --- a/docs/sdk/contractkit/classes/wrappers_Governance.GovernanceWrapper.md +++ b/docs/sdk/contractkit/classes/wrappers_Governance.GovernanceWrapper.md @@ -123,7 +123,7 @@ Contract managing voting for governance proposals. #### Defined in -[packages/sdk/contractkit/src/wrappers/BaseWrapperForGoverning.ts:23](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/wrappers/BaseWrapperForGoverning.ts#L23) +[packages/sdk/contractkit/src/wrappers/BaseWrapperForGoverning.ts:25](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/wrappers/BaseWrapperForGoverning.ts#L25) ## Properties @@ -988,7 +988,7 @@ ___ ### methodIds -• **methodIds**: `Record`\<``"propose"`` \| ``"executeHotfix"`` \| ``"concurrentProposals"`` \| ``"dequeueFrequency"`` \| ``"minDeposit"`` \| ``"queueExpiry"`` \| ``"stageDurations"`` \| ``"upvote"`` \| ``"refundedDeposits"`` \| ``"approver"`` \| ``"checkProofOfPossession"`` \| ``"dequeued"`` \| ``"emptyIndices"`` \| ``"fractionMulExp"`` \| ``"getBlockNumberFromHeader"`` \| ``"getEpochNumber"`` \| ``"getEpochNumberOfBlock"`` \| ``"getEpochSize"`` \| ``"getParentSealBitmap"`` \| ``"getVerifiedSealBitmapFromHeader"`` \| ``"hashHeader"`` \| ``"hotfixExecutionTimeWindow"`` \| ``"hotfixes"`` \| ``"initialized"`` \| ``"isL2"`` \| ``"isOwner"`` \| ``"lastDequeue"`` \| ``"minQuorumSize"`` \| ``"minQuorumSizeInCurrentSet"`` \| ``"numberValidatorsInCurrentSet"`` \| ``"numberValidatorsInSet"`` \| ``"owner"`` \| ``"proposalCount"`` \| ``"registry"`` \| ``"renounceOwnership"`` \| ``"securityCouncil"`` \| ``"setRegistry"`` \| ``"transferOwnership"`` \| ``"validatorSignerAddressFromCurrentSet"`` \| ``"validatorSignerAddressFromSet"`` \| ``"initialize"`` \| ``"setConstitution"`` \| ``"setSecurityCouncil"`` \| ``"setHotfixExecutionTimeWindow"`` \| ``"revokeUpvote"`` \| ``"approve"`` \| ``"vote"`` \| ``"votePartially"`` \| ``"revokeVotes"`` \| ``"execute"`` \| ``"approveHotfix"`` \| ``"whitelistHotfix"`` \| ``"prepareHotfix"`` \| ``"withdraw"`` \| ``"isProposalPassing"`` \| ``"isDequeuedProposal"`` \| ``"isDequeuedProposalExpired"`` \| ``"getConstitution"`` \| ``"isVoting"`` \| ``"getReferendumStageDuration"`` \| ``"getExecutionStageDuration"`` \| ``"getParticipationParameters"`` \| ``"proposalExists"`` \| ``"getProposal"`` \| ``"getProposalTransaction"`` \| ``"isApproved"`` \| ``"getVoteTotals"`` \| ``"getVoteRecord"`` \| ``"getQueueLength"`` \| ``"getUpvotes"`` \| ``"getQueue"`` \| ``"getDequeue"`` \| ``"getUpvoteRecord"`` \| ``"getMostRecentReferendumProposal"`` \| ``"getProposalStage"`` \| ``"getVersionNumber"`` \| ``"getHotfixHash"`` \| ``"setApprover"`` \| ``"setConcurrentProposals"`` \| ``"setMinDeposit"`` \| ``"setQueueExpiry"`` \| ``"setDequeueFrequency"`` \| ``"setReferendumStageDuration"`` \| ``"setExecutionStageDuration"`` \| ``"setParticipationBaseline"`` \| ``"setParticipationFloor"`` \| ``"setBaselineUpdateFactor"`` \| ``"setBaselineQuorumFactor"`` \| ``"dequeueProposalsIfReady"`` \| ``"removeVotesWhenRevokingDelegatedVotes"`` \| ``"resetHotFixRecord"`` \| ``"hotfixWhitelistValidatorTally"`` \| ``"isHotfixPassing"`` \| ``"getL1HotfixRecord"`` \| ``"getL2HotfixRecord"`` \| ``"isQueued"`` \| ``"isHotfixWhitelistedBy"`` \| ``"isQueuedProposalExpired"`` \| ``"getAmountOfGoldUsedForVoting"``, `string`\> +• **methodIds**: `Record`\<``"propose"`` \| ``"executeHotfix"`` \| ``"concurrentProposals"`` \| ``"dequeueFrequency"`` \| ``"minDeposit"`` \| ``"queueExpiry"`` \| ``"stageDurations"`` \| ``"upvote"`` \| ``"refundedDeposits"`` \| ``"approver"`` \| ``"checkProofOfPossession"`` \| ``"dequeued"`` \| ``"emptyIndices"`` \| ``"fractionMulExp"`` \| ``"getBlockNumberFromHeader"`` \| ``"getEpochNumber"`` \| ``"getEpochNumberOfBlock"`` \| ``"getEpochSize"`` \| ``"getParentSealBitmap"`` \| ``"getVerifiedSealBitmapFromHeader"`` \| ``"hashHeader"`` \| ``"hotfixExecutionTimeWindow"`` \| ``"hotfixes"`` \| ``"initialized"`` \| ``"isOwner"`` \| ``"lastDequeue"`` \| ``"minQuorumSize"`` \| ``"minQuorumSizeInCurrentSet"`` \| ``"numberValidatorsInCurrentSet"`` \| ``"numberValidatorsInSet"`` \| ``"owner"`` \| ``"proposalCount"`` \| ``"registry"`` \| ``"renounceOwnership"`` \| ``"securityCouncil"`` \| ``"setRegistry"`` \| ``"transferOwnership"`` \| ``"validatorAddressFromCurrentSet"`` \| ``"validatorSignerAddressFromCurrentSet"`` \| ``"validatorSignerAddressFromSet"`` \| ``"initialize"`` \| ``"setConstitution"`` \| ``"setSecurityCouncil"`` \| ``"setHotfixExecutionTimeWindow"`` \| ``"revokeUpvote"`` \| ``"approve"`` \| ``"vote"`` \| ``"votePartially"`` \| ``"revokeVotes"`` \| ``"execute"`` \| ``"approveHotfix"`` \| ``"whitelistHotfix"`` \| ``"prepareHotfix"`` \| ``"withdraw"`` \| ``"isProposalPassing"`` \| ``"isDequeuedProposal"`` \| ``"isDequeuedProposalExpired"`` \| ``"getConstitution"`` \| ``"isVoting"`` \| ``"getReferendumStageDuration"`` \| ``"getExecutionStageDuration"`` \| ``"getParticipationParameters"`` \| ``"proposalExists"`` \| ``"getProposal"`` \| ``"getProposalTransaction"`` \| ``"isApproved"`` \| ``"getVoteTotals"`` \| ``"getVoteRecord"`` \| ``"getQueueLength"`` \| ``"getUpvotes"`` \| ``"getQueue"`` \| ``"getDequeue"`` \| ``"getUpvoteRecord"`` \| ``"getMostRecentReferendumProposal"`` \| ``"getProposalStage"`` \| ``"getVersionNumber"`` \| ``"getHotfixHash"`` \| ``"setApprover"`` \| ``"setConcurrentProposals"`` \| ``"setMinDeposit"`` \| ``"setQueueExpiry"`` \| ``"setDequeueFrequency"`` \| ``"setReferendumStageDuration"`` \| ``"setExecutionStageDuration"`` \| ``"setParticipationBaseline"`` \| ``"setParticipationFloor"`` \| ``"setBaselineUpdateFactor"`` \| ``"setBaselineQuorumFactor"`` \| ``"dequeueProposalsIfReady"`` \| ``"removeVotesWhenRevokingDelegatedVotes"`` \| ``"resetHotFixRecord"`` \| ``"hotfixWhitelistValidatorTally"`` \| ``"isHotfixPassing"`` \| ``"getL1HotfixRecord"`` \| ``"getHotfixRecord"`` \| ``"getL2HotfixRecord"`` \| ``"isQueued"`` \| ``"isHotfixWhitelistedBy"`` \| ``"isQueuedProposalExpired"`` \| ``"getAmountOfGoldUsedForVoting"``, `string`\> #### Inherited from diff --git a/docs/sdk/contractkit/classes/wrappers_LockedGold.LockedGoldWrapper.md b/docs/sdk/contractkit/classes/wrappers_LockedGold.LockedGoldWrapper.md index b1d745681..7c8031d19 100644 --- a/docs/sdk/contractkit/classes/wrappers_LockedGold.LockedGoldWrapper.md +++ b/docs/sdk/contractkit/classes/wrappers_LockedGold.LockedGoldWrapper.md @@ -82,7 +82,7 @@ Contract for handling deposits needed for voting. #### Defined in -[packages/sdk/contractkit/src/wrappers/BaseWrapperForGoverning.ts:23](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/wrappers/BaseWrapperForGoverning.ts#L23) +[packages/sdk/contractkit/src/wrappers/BaseWrapperForGoverning.ts:25](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/wrappers/BaseWrapperForGoverning.ts#L25) ## Properties diff --git a/docs/sdk/contractkit/classes/wrappers_ReleaseGold.ReleaseGoldWrapper.md b/docs/sdk/contractkit/classes/wrappers_ReleaseGold.ReleaseGoldWrapper.md index e121b1457..6777a6e5f 100644 --- a/docs/sdk/contractkit/classes/wrappers_ReleaseGold.ReleaseGoldWrapper.md +++ b/docs/sdk/contractkit/classes/wrappers_ReleaseGold.ReleaseGoldWrapper.md @@ -112,7 +112,7 @@ Contract for handling an instance of a ReleaseGold contract. #### Defined in -[packages/sdk/contractkit/src/wrappers/BaseWrapperForGoverning.ts:23](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/wrappers/BaseWrapperForGoverning.ts#L23) +[packages/sdk/contractkit/src/wrappers/BaseWrapperForGoverning.ts:25](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/wrappers/BaseWrapperForGoverning.ts#L25) ## Properties diff --git a/docs/sdk/contractkit/classes/wrappers_ScoreManager.ScoreManagerWrapper.md b/docs/sdk/contractkit/classes/wrappers_ScoreManager.ScoreManagerWrapper.md index 5a8afc818..ca34f6598 100644 --- a/docs/sdk/contractkit/classes/wrappers_ScoreManager.ScoreManagerWrapper.md +++ b/docs/sdk/contractkit/classes/wrappers_ScoreManager.ScoreManagerWrapper.md @@ -86,6 +86,7 @@ ___ | :------ | :------ | | `GroupScoreSet` | `ContractEvent`\<\{ `0`: `string` ; `1`: `string` ; `group`: `string` ; `score`: `string` }\> | | `OwnershipTransferred` | `ContractEvent`\<\{ `0`: `string` ; `1`: `string` ; `newOwner`: `string` ; `previousOwner`: `string` }\> | +| `ScoreManagerSetterSet` | `ContractEvent`\<`string`\> | | `ValidatorScoreSet` | `ContractEvent`\<\{ `0`: `string` ; `1`: `string` ; `score`: `string` ; `validator`: `string` }\> | | `allEvents` | (`options?`: `EventOptions`, `cb?`: `Callback`\<`EventLog`\>) => `EventEmitter` | @@ -149,7 +150,7 @@ ___ ### methodIds -• **methodIds**: `Record`\<``"initialized"`` \| ``"owner"`` \| ``"renounceOwnership"`` \| ``"transferOwnership"`` \| ``"initialize"`` \| ``"getVersionNumber"`` \| ``"groupScores"`` \| ``"validatorScores"`` \| ``"setGroupScore"`` \| ``"setValidatorScore"`` \| ``"getGroupScore"`` \| ``"getValidatorScore"``, `string`\> +• **methodIds**: `Record`\<``"initialized"`` \| ``"owner"`` \| ``"renounceOwnership"`` \| ``"transferOwnership"`` \| ``"initialize"`` \| ``"getVersionNumber"`` \| ``"ZERO_SCORE"`` \| ``"groupScores"`` \| ``"validatorScores"`` \| ``"setGroupScore"`` \| ``"setValidatorScore"`` \| ``"setScoreManagerSetter"`` \| ``"getGroupScore"`` \| ``"getValidatorScore"`` \| ``"getScoreManagerSetter"``, `string`\> #### Inherited from @@ -191,7 +192,7 @@ Contract getPastEvents | Name | Type | | :------ | :------ | -| `event` | ``"OwnershipTransferred"`` \| ``"allEvents"`` \| ``"GroupScoreSet"`` \| ``"ValidatorScoreSet"`` | +| `event` | ``"OwnershipTransferred"`` \| ``"allEvents"`` \| ``"GroupScoreSet"`` \| ``"ScoreManagerSetterSet"`` \| ``"ValidatorScoreSet"`` | | `options` | `PastEventOptions` | #### Returns diff --git a/docs/sdk/contractkit/classes/wrappers_Validators.ValidatorsWrapper.md b/docs/sdk/contractkit/classes/wrappers_Validators.ValidatorsWrapper.md index 9d9b069a4..fe4095f7c 100644 --- a/docs/sdk/contractkit/classes/wrappers_Validators.ValidatorsWrapper.md +++ b/docs/sdk/contractkit/classes/wrappers_Validators.ValidatorsWrapper.md @@ -106,7 +106,7 @@ Contract for voting for validators and managing validator groups. #### Defined in -[packages/sdk/contractkit/src/wrappers/BaseWrapperForGoverning.ts:23](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/wrappers/BaseWrapperForGoverning.ts#L23) +[packages/sdk/contractkit/src/wrappers/BaseWrapperForGoverning.ts:25](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/wrappers/BaseWrapperForGoverning.ts#L25) ## Properties @@ -613,7 +613,7 @@ ___ ### methodIds -• **methodIds**: `Record`\<``"groupLockedGoldRequirements"`` \| ``"validatorLockedGoldRequirements"`` \| ``"maxGroupSize"`` \| ``"membershipHistoryLength"`` \| ``"slashingMultiplierResetPeriod"`` \| ``"commissionUpdateDelay"`` \| ``"downtimeGracePeriod"`` \| ``"checkProofOfPossession"`` \| ``"fractionMulExp"`` \| ``"getBlockNumberFromHeader"`` \| ``"getEpochNumber"`` \| ``"getEpochNumberOfBlock"`` \| ``"getEpochSize"`` \| ``"getParentSealBitmap"`` \| ``"getVerifiedSealBitmapFromHeader"`` \| ``"hashHeader"`` \| ``"initialized"`` \| ``"isL2"`` \| ``"minQuorumSize"`` \| ``"minQuorumSizeInCurrentSet"`` \| ``"numberValidatorsInCurrentSet"`` \| ``"numberValidatorsInSet"`` \| ``"owner"`` \| ``"registry"`` \| ``"renounceOwnership"`` \| ``"setRegistry"`` \| ``"transferOwnership"`` \| ``"validatorSignerAddressFromCurrentSet"`` \| ``"validatorSignerAddressFromSet"`` \| ``"initialize"`` \| ``"getVersionNumber"`` \| ``"updateValidatorScoreFromSigner"`` \| ``"distributeEpochPaymentsFromSigner"`` \| ``"registerValidator"`` \| ``"registerValidatorNoBls"`` \| ``"deregisterValidator"`` \| ``"affiliate"`` \| ``"deaffiliate"`` \| ``"updateBlsPublicKey"`` \| ``"updateEcdsaPublicKey"`` \| ``"deregisterValidatorGroup"`` \| ``"updatePublicKeys"`` \| ``"registerValidatorGroup"`` \| ``"addMember"`` \| ``"addFirstMember"`` \| ``"removeMember"`` \| ``"reorderMember"`` \| ``"setNextCommissionUpdate"`` \| ``"updateCommission"`` \| ``"forceDeaffiliateIfValidator"`` \| ``"resetSlashingMultiplier"`` \| ``"halveSlashingMultiplier"`` \| ``"mintStableToEpochManager"`` \| ``"getValidatorBlsPublicKeyFromSigner"`` \| ``"getMembershipHistoryLength"`` \| ``"getValidatorGroup"`` \| ``"getTopGroupValidators"`` \| ``"getTopGroupValidatorsAccounts"`` \| ``"getGroupsNumMembers"`` \| ``"getNumRegisteredValidators"`` \| ``"getValidatorLockedGoldRequirements"`` \| ``"getGroupLockedGoldRequirements"`` \| ``"getRegisteredValidators"`` \| ``"getRegisteredValidatorGroups"`` \| ``"getMembershipInLastEpochFromSigner"`` \| ``"getValidatorGroupSlashingMultiplier"`` \| ``"groupMembershipInEpoch"`` \| ``"getValidatorScoreParameters"`` \| ``"getMembershipHistory"`` \| ``"calculateGroupEpochScore"`` \| ``"getCommissionUpdateDelay"`` \| ``"computeEpochReward"`` \| ``"setCommissionUpdateDelay"`` \| ``"setMaxGroupSize"`` \| ``"setMembershipHistoryLength"`` \| ``"setValidatorScoreParameters"`` \| ``"setGroupLockedGoldRequirements"`` \| ``"setValidatorLockedGoldRequirements"`` \| ``"setSlashingMultiplierResetPeriod"`` \| ``"setDowntimeGracePeriod"`` \| ``"getAccountLockedGoldRequirement"`` \| ``"getMembershipInLastEpoch"`` \| ``"calculateEpochScore"`` \| ``"meetsAccountLockedGoldRequirements"`` \| ``"getValidator"`` \| ``"getValidatorsGroup"`` \| ``"getGroupNumMembers"`` \| ``"isValidatorGroup"`` \| ``"isValidator"``, `string`\> +• **methodIds**: `Record`\<``"groupLockedGoldRequirements"`` \| ``"validatorLockedGoldRequirements"`` \| ``"maxGroupSize"`` \| ``"membershipHistoryLength"`` \| ``"slashingMultiplierResetPeriod"`` \| ``"commissionUpdateDelay"`` \| ``"downtimeGracePeriod"`` \| ``"checkProofOfPossession"`` \| ``"fractionMulExp"`` \| ``"getBlockNumberFromHeader"`` \| ``"getEpochNumber"`` \| ``"getEpochNumberOfBlock"`` \| ``"getEpochSize"`` \| ``"getParentSealBitmap"`` \| ``"getVerifiedSealBitmapFromHeader"`` \| ``"hashHeader"`` \| ``"initialized"`` \| ``"minQuorumSize"`` \| ``"minQuorumSizeInCurrentSet"`` \| ``"numberValidatorsInCurrentSet"`` \| ``"numberValidatorsInSet"`` \| ``"owner"`` \| ``"registry"`` \| ``"renounceOwnership"`` \| ``"setRegistry"`` \| ``"transferOwnership"`` \| ``"validatorAddressFromCurrentSet"`` \| ``"validatorSignerAddressFromCurrentSet"`` \| ``"validatorSignerAddressFromSet"`` \| ``"initialize"`` \| ``"getVersionNumber"`` \| ``"updateValidatorScoreFromSigner"`` \| ``"distributeEpochPaymentsFromSigner"`` \| ``"registerValidator"`` \| ``"registerValidatorNoBls"`` \| ``"deregisterValidator"`` \| ``"affiliate"`` \| ``"deaffiliate"`` \| ``"updateBlsPublicKey"`` \| ``"updateEcdsaPublicKey"`` \| ``"deregisterValidatorGroup"`` \| ``"updatePublicKeys"`` \| ``"registerValidatorGroup"`` \| ``"addMember"`` \| ``"addFirstMember"`` \| ``"removeMember"`` \| ``"reorderMember"`` \| ``"setNextCommissionUpdate"`` \| ``"updateCommission"`` \| ``"forceDeaffiliateIfValidator"`` \| ``"resetSlashingMultiplier"`` \| ``"halveSlashingMultiplier"`` \| ``"mintStableToEpochManager"`` \| ``"getValidatorBlsPublicKeyFromSigner"`` \| ``"getMembershipHistoryLength"`` \| ``"getValidatorGroup"`` \| ``"getTopGroupValidators"`` \| ``"getTopGroupValidatorsAccounts"`` \| ``"getGroupsNumMembers"`` \| ``"getNumRegisteredValidators"`` \| ``"getValidatorLockedGoldRequirements"`` \| ``"getGroupLockedGoldRequirements"`` \| ``"getRegisteredValidatorSigners"`` \| ``"getRegisteredValidators"`` \| ``"getRegisteredValidatorGroups"`` \| ``"getMembershipInLastEpochFromSigner"`` \| ``"getValidatorGroupSlashingMultiplier"`` \| ``"groupMembershipInEpoch"`` \| ``"getValidatorScoreParameters"`` \| ``"getMembershipHistory"`` \| ``"calculateGroupEpochScore"`` \| ``"getMaxGroupSize"`` \| ``"getCommissionUpdateDelay"`` \| ``"computeEpochReward"`` \| ``"setCommissionUpdateDelay"`` \| ``"setMaxGroupSize"`` \| ``"setMembershipHistoryLength"`` \| ``"setValidatorScoreParameters"`` \| ``"setGroupLockedGoldRequirements"`` \| ``"setValidatorLockedGoldRequirements"`` \| ``"setSlashingMultiplierResetPeriod"`` \| ``"setDowntimeGracePeriod"`` \| ``"getAccountLockedGoldRequirement"`` \| ``"getMembershipInLastEpoch"`` \| ``"calculateEpochScore"`` \| ``"meetsAccountLockedGoldRequirements"`` \| ``"getValidator"`` \| ``"getValidatorsGroup"`` \| ``"getGroupNumMembers"`` \| ``"isValidatorGroup"`` \| ``"isValidator"``, `string`\> #### Inherited from diff --git a/docs/sdk/contractkit/modules/wrappers_DowntimeSlasher.md b/docs/sdk/contractkit/modules/wrappers_DowntimeSlasher.md index 036e9a222..cc3b9479d 100644 --- a/docs/sdk/contractkit/modules/wrappers_DowntimeSlasher.md +++ b/docs/sdk/contractkit/modules/wrappers_DowntimeSlasher.md @@ -25,4 +25,4 @@ #### Defined in -[packages/sdk/contractkit/src/wrappers/DowntimeSlasher.ts:223](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/wrappers/DowntimeSlasher.ts#L223) +[packages/sdk/contractkit/src/wrappers/DowntimeSlasher.ts:229](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/wrappers/DowntimeSlasher.ts#L229) diff --git a/docs/sdk/contractkit/modules/wrappers_EpochManager.md b/docs/sdk/contractkit/modules/wrappers_EpochManager.md index e1d6e774c..d87de8d9a 100644 --- a/docs/sdk/contractkit/modules/wrappers_EpochManager.md +++ b/docs/sdk/contractkit/modules/wrappers_EpochManager.md @@ -29,4 +29,4 @@ #### Defined in -[packages/sdk/contractkit/src/wrappers/EpochManager.ts:138](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/wrappers/EpochManager.ts#L138) +[packages/sdk/contractkit/src/wrappers/EpochManager.ts:143](https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/wrappers/EpochManager.ts#L143) diff --git a/packages/cli/src/commands/governance/approve-l2.test.ts b/packages/cli/src/commands/governance/approve-l2.test.ts index b885a19f4..fc52bed75 100644 --- a/packages/cli/src/commands/governance/approve-l2.test.ts +++ b/packages/cli/src/commands/governance/approve-l2.test.ts @@ -80,7 +80,7 @@ testWithAnvilL2('governance:approve cmd', (web3: Web3) => { "Running Checks:", ], [ - " ✔ 0x0639DBA9CBD6586E665B2bB7b705C65d96aae4f7 is security council address ", + " ✔ 0xf750153fc4211e4Ef325A7fD87d8258222e0b510 is security council address ", ], [ " ✘ 0x5409ED021D9299bf6814279A6A1411A7e866A631 is security council multisig signatory ", @@ -126,7 +126,7 @@ testWithAnvilL2('governance:approve cmd', (web3: Web3) => { "Running Checks:", ], [ - " ✔ 0x0639DBA9CBD6586E665B2bB7b705C65d96aae4f7 is approver address ", + " ✔ 0xf750153fc4211e4Ef325A7fD87d8258222e0b510 is approver address ", ], [ " ✘ 0x5409ED021D9299bf6814279A6A1411A7e866A631 is approver multisig signatory ", @@ -490,7 +490,7 @@ testWithAnvilL2('governance:approve cmd', (web3: Web3) => { "Running Checks:", ], [ - " ✔ 0x0639DBA9CBD6586E665B2bB7b705C65d96aae4f7 is security council address ", + " ✔ 0xf750153fc4211e4Ef325A7fD87d8258222e0b510 is security council address ", ], [ " ✔ 0x5409ED021D9299bf6814279A6A1411A7e866A631 is security council multisig signatory ", @@ -546,7 +546,7 @@ testWithAnvilL2('governance:approve cmd', (web3: Web3) => { "Running Checks:", ], [ - " ✔ 0x0639DBA9CBD6586E665B2bB7b705C65d96aae4f7 is approver address ", + " ✔ 0xf750153fc4211e4Ef325A7fD87d8258222e0b510 is approver address ", ], [ " ✔ 0x5409ED021D9299bf6814279A6A1411A7e866A631 is approver multisig signatory ", @@ -634,7 +634,7 @@ testWithAnvilL2('governance:approve cmd', (web3: Web3) => { "Running Checks:", ], [ - " ✔ 0x0639DBA9CBD6586E665B2bB7b705C65d96aae4f7 is security council address ", + " ✔ 0xf750153fc4211e4Ef325A7fD87d8258222e0b510 is security council address ", ], [ " ✔ 0x5409ED021D9299bf6814279A6A1411A7e866A631 is security council multisig signatory ", diff --git a/packages/cli/src/commands/governance/approve.test.ts b/packages/cli/src/commands/governance/approve.test.ts index a1dbaef2c..2c1c7b70b 100644 --- a/packages/cli/src/commands/governance/approve.test.ts +++ b/packages/cli/src/commands/governance/approve.test.ts @@ -64,7 +64,7 @@ testWithAnvilL1('governance:approve cmd', (web3: Web3) => { "Running Checks:", ], [ - " ✔ 0x0639DBA9CBD6586E665B2bB7b705C65d96aae4f7 is approver address ", + " ✔ 0xf750153fc4211e4Ef325A7fD87d8258222e0b510 is approver address ", ], [ " ✘ 0x5409ED021D9299bf6814279A6A1411A7e866A631 is multisig signatory ", @@ -103,7 +103,7 @@ testWithAnvilL1('governance:approve cmd', (web3: Web3) => { "Running Checks:", ], [ - " ✔ 0x0639DBA9CBD6586E665B2bB7b705C65d96aae4f7 is approver address ", + " ✔ 0xf750153fc4211e4Ef325A7fD87d8258222e0b510 is approver address ", ], [ " ✔ 0x5409ED021D9299bf6814279A6A1411A7e866A631 is multisig signatory ", @@ -159,7 +159,7 @@ testWithAnvilL1('governance:approve cmd', (web3: Web3) => { "Running Checks:", ], [ - " ✔ 0x0639DBA9CBD6586E665B2bB7b705C65d96aae4f7 is approver address ", + " ✔ 0xf750153fc4211e4Ef325A7fD87d8258222e0b510 is approver address ", ], [ " ✔ 2 is an existing proposal ", @@ -198,7 +198,7 @@ testWithAnvilL1('governance:approve cmd', (web3: Web3) => { "Running Checks:", ], [ - " ✔ 0x0639DBA9CBD6586E665B2bB7b705C65d96aae4f7 is approver address ", + " ✔ 0xf750153fc4211e4Ef325A7fD87d8258222e0b510 is approver address ", ], [ " ✔ 2 is an existing proposal ", diff --git a/packages/cli/src/commands/network/__snapshots__/contracts-l2.test.ts.snap b/packages/cli/src/commands/network/__snapshots__/contracts-l2.test.ts.snap index 63f50bbed..70eb072f5 100644 --- a/packages/cli/src/commands/network/__snapshots__/contracts-l2.test.ts.snap +++ b/packages/cli/src/commands/network/__snapshots__/contracts-l2.test.ts.snap @@ -6,188 +6,188 @@ exports[`network:contracts runs 1`] = ` "[ { "contract": "Accounts", - "proxy": "0x3B4a625Ba01F298Fab94eda78e4e310704F9B658", - "implementation": "0x27f640a4f0C95Fd18432be400653113ce0b6a617", - "version": "1.1.5.0" + "proxy": "0x6e31AE4b9cC7A90ae038b8FBBEd2Eb95104BA8aE", + "implementation": "0x8b2172Dd4eEA915EFc7dCD186E1cC96B8D7E1632", + "version": "1.1.4.2" }, { "contract": "BlockchainParameters", - "proxy": "0xcb2921E8b22b3d5e8C034d5A1AaA594E24443587", - "implementation": "0xf604D0eDFd3Dc73Dc1DbC31ccf54b218cbF1862F", + "proxy": "0xff32a62a9f303e3cB4985CCbEA9122f320EcD154", + "implementation": "0x981E260e7a2d7a83C8F4bA78B40cc97AAB95EDF7", "version": "1.3.1.0" }, { "contract": "CeloUnreleasedTreasury", - "proxy": "0x7C9745752517812d2c7968741Fa8b1B578cFD441", - "implementation": "0xCcE3F693556cbed36759bC162E5e47705E0D7C2A", + "proxy": "0x621b99D7698395aD1A677d981a7F7Ae66cB4861f", + "implementation": "0x4657793c02091974B42d28aA46225A81c113C0C2", "version": "1.1.0.0" }, { "contract": "DoubleSigningSlasher", - "proxy": "0x031C3be2CC63d31226A0EA14FBfD83ae70A76fB1", - "implementation": "0x4e18F3711cDc6613ea630f1fDFB89a01500934c5", - "version": "1.1.2.0" + "proxy": "0x96402dEDCcA832F2874E0fD9626cba302B7495bB", + "implementation": "0x1e96753a534436d7D09bB5f0c9f2e7081A35bd4E", + "version": "1.1.1.1" }, { "contract": "DowntimeSlasher", - "proxy": "0x4c5160408DE5FFA4f4c25034D084c40aec3bA6fF", - "implementation": "0x60b6b1fAe1945ef53AAe72a3f7699708348298D6", - "version": "2.0.1.0" + "proxy": "0x1c82668A47EF53655fC7b473e39a6f8E46E8C154", + "implementation": "0xa1F0F1F2138007695f943872A502ae96ff1Ee9df", + "version": "2.0.0.1" }, { "contract": "Election", - "proxy": "0x947DB20Ef764841b4aD9335b0DdaB83B03AF25EC", - "implementation": "0x0dB1e9Ceb6627ac045a8D316E67b2638B31b4bBf", + "proxy": "0xcB4E4A207DC1C220bd54B2A983E32e923c32E544", + "implementation": "0x6710D9980C55D7963B4dA671A159523BB5b4F6d1", "version": "1.1.4.0" }, { "contract": "EpochManager", - "proxy": "0xbf13Ba354EeF22976Faf20b11E6dd5440514eE68", - "implementation": "0x2b1b73Ad62eFC51afE62D20b79B5e0bc41BBe333", + "proxy": "0x2E290D8c2D6b26985f2826A63Aa103963DbAca23", + "implementation": "0x3D70ab096AF8892b4C3CB652E9D7e1CceA6e25FC", "version": "1.1.0.0" }, { "contract": "EpochManagerEnabler", - "proxy": "0x8A6F9F2B407FD63a087D47b32A98A991d26298f0", - "implementation": "0x8b0D48E4CA18484aEDc3B50f28EEa342F68B3430", + "proxy": "0xeD2E802c08227c1b3DA3F502Ed9dcAA01616309B", + "implementation": "0x3fFcB4bf2D76C659Aea8AC6667C0C611576284aA", "version": "1.1.0.0" }, { "contract": "EpochRewards", - "proxy": "0x4573120f10c89671a0083d0361B6F3e535de6e6a", - "implementation": "0x5F5f8d61CC0a077CAFD24395a4876c80063c26BD", + "proxy": "0x535D5EbB846832A2d876380dBccCb84eE5521d3f", + "implementation": "0xB4C3e97Ee2acaeb7D840Fde692465903239f213E", "version": "1.1.2.0" }, { "contract": "Escrow", - "proxy": "0x37C08a3F428258e5B835a256b2FB69C52843989a", - "implementation": "0x4242e61cF23587b7d73da0b36b66CDCD6D6c9071", + "proxy": "0x69EeE27C1ace51A7a5306D41262D16B6838aDd88", + "implementation": "0xdc359C2E9586B93Ab41fC180079E6485Bc8963Fb", "version": "1.2.0.0" }, { "contract": "FederatedAttestations", - "proxy": "0x6470D27B61D39D4d430083C4D461b9deD5C36e19", - "implementation": "0xFE0393E974cd59c1000E50F1ae83289Ba3CD528B", + "proxy": "0x2972DF87DA881bf2E71ea8aF6dE6E8b2731e13e9", + "implementation": "0x6319822f850f649F23b6d2ABE6d3c68D26a11679", "version": "1.1.0.0" }, { "contract": "FeeCurrencyDirectory", - "proxy": "0x0eD091C4F1669B31A4C22408Ce44326a0914f8Ec", - "implementation": "0x06Ff7d743E523ac7743A37602b50cD16FD0921a3", + "proxy": "0x5a7D21C9255DAA32109c8136661D7e853Fc5BF63", + "implementation": "0xD1F6cdb1E576395076Eb1aF4E2b76037cbb59C95", "version": "1.1.0.0" }, { "contract": "FeeCurrencyWhitelist", - "proxy": "0xC4A33659f7cf6277bcE979E3Dbd968e19015472a", - "implementation": "0x6417714d1997497182DB4abcc5D17bB8efcd2055", + "proxy": "0xdc2aFCA04340Ff16Bf0ac722568F1F9832Cc6154", + "implementation": "0xcA4009932604dfe05A0bD453f31a55770016E681", "version": "NONE" }, { "contract": "FeeHandler", - "proxy": "0xC7Bbf9cF343A87B592aE9B0E9ee2c8E71D7f5387", - "implementation": "0x18bC41e7032e9e78A2b7D0232E91c0cD7a898121", - "version": "1.1.0.1" + "proxy": "0xeaEEC408eCbCdF9CDF21d0B1880419dF7290E2c9", + "implementation": "0x82106CcC8feAE0bEc797281ae4dDf5F77E3E6156", + "version": "1.2.0.0" }, { "contract": "Freezer", - "proxy": "0x72AFCee38f30f878468ef4B09784bab03Ebe7979", - "implementation": "0x3CDbA319Ea4ab399d3FD5281e0eE3443077fAffd", + "proxy": "0x1ab1c5cd627d5e51aD093FF6F9433309CD68597e", + "implementation": "0x5b782AF0BCFbA4a66b6441a9cE05A7954a6d9913", "version": "NONE" }, { "contract": "GasPriceMinimum", - "proxy": "0x50e744e3e818cBebB6251bB577E8D106E06C4D08", - "implementation": "0x64B7527B6fc6327403603FA5C9ADe48a6160808f", + "proxy": "0x9220E1A69bF1b9A26041ff582b7AdC4124D8364f", + "implementation": "0x541Cdf8Dd40cEC9bAF3824001776A0C4f842c08B", "version": "1.2.1.0" }, { "contract": "GoldToken", - "proxy": "0x53C4774Afa905093531dD7312a7171f78ba64e8E", - "implementation": "0x7B04141AB1EE8ECCd189015e7bF1294531785708", + "proxy": "0x84afC656f046C38D6022C2f02b9F667f028e1ef0", + "implementation": "0xd83c2018543B661B6e96810ca1B8b87a4B01e1a8", "version": "1.1.3.0" }, { "contract": "Governance", - "proxy": "0x1164B9e064bf1D8C3B70a70A4b6929d0488b6d0a", - "implementation": "0x4feBB2a68917ba1902EAA94934e67158Ef2E211C", - "version": "1.5.0.0" + "proxy": "0x2EB25B5eb9d5A4f61deb1e4F846343F862eB67D9", + "implementation": "0x063BDb2e9A86e8aD2ad9fc488e9E45Dc2a845c3a", + "version": "1.4.2.0" }, { "contract": "LockedGold", - "proxy": "0x08E6B8D57c7387364EbF5DD3bc34Ed96e97ff0bF", - "implementation": "0xFFdeBC16e42b199b8A8FC7f6D55Cc14da0b059A2", + "proxy": "0x619b4767f6A955E63ED7d334DF3384bc4eacFdB8", + "implementation": "0xaEeE10944B805Bda8Ef6d41645aDb36b24B3F9E1", "version": "1.1.5.0" }, { "contract": "MentoFeeHandlerSeller", - "proxy": "0x119e4B81Ea1E0cAb2222411216486d7B1e75f20C", - "implementation": "0x5b0605c44f4356b6F479f00fD5e3A1e6D22867Fc", - "version": "1.1.0.1" + "proxy": "0x4b08c6219147552F68A3D4CA0ab4737B531660e4", + "implementation": "0x5d301e716d607a0c43B8DfF4d6102a13c18FA961", + "version": "1.1.1.0" }, { "contract": "OdisPayments", - "proxy": "0xA538082B97D1059abd2B8Ea609517E4EF092C25f", - "implementation": "0x7c14920BF4319C81b6Ac73532e3a40eC794e548C", + "proxy": "0x8Cc7e63482Ca6Ee77E0D1820395289D07249de77", + "implementation": "0x5683019ff6BCEaaC2badD1d73F6Ff28500079b41", "version": "1.1.0.0" }, { "contract": "Random", - "proxy": "0x4e9E0C0C16d0bCb477bD819C626Fe2ad6C223C92", - "implementation": "0x854DeFc99Cc15b2deA3E2fdB69c4EDe9D8e111A7", + "proxy": "0xA9DB88ADd5d6910183F38D5d0A451868898C7C82", + "implementation": "0x93D3Af5d5aAb66fAeF41A9242E12307D1813d2B3", "version": "1.1.2.0" }, { "contract": "Registry", "proxy": "0x000000000000000000000000000000000000ce10", - "implementation": "0xd677807472E95cdC82CCbD79B84bAC8395187a8F", + "implementation": "0x67bd72d0101905B1928E56f3204058c8C2D53251", "version": "NONE" }, { "contract": "Reserve", - "proxy": "0x0080094aDe1b0D9337bE75c470d84aDC561Ac964", + "proxy": "0x153193d9b852Dd791565a2929110282976040e54", "implementation": "0x6DDBd2A88C55e28ac8283c43D1F7100C295283fb", "version": "1.1.2.2" }, { "contract": "ScoreManager", - "proxy": "0x150Cd14f6caeB9f9E16ca6B330B487822D4Ea00a", - "implementation": "0x154A296F3D0A618d85884D9F669309957D0cF63F", + "proxy": "0x26B262FbaB2E243a4CEFD2Dbde9e1C203BaCd732", + "implementation": "0x345E7101aa60eDe5864822FC3fb2E5d5f679C187", "version": "1.1.0.0" }, { "contract": "SortedOracles", - "proxy": "0xAa2b1051A90b6BCa493E844338307dCe6817F4d7", - "implementation": "0x8501aF1E5161026c363C46e025561DEFd007271E", + "proxy": "0xeA6aCD469A2C2F32E167a9Ce50db735B61e00A2a", + "implementation": "0x19f9025D0eF2Ea2025b51DCB7CEEC4845aaf2A5e", "version": "1.1.4.0" }, { "contract": "StableToken", - "proxy": "0x9cA64d4663B4A623C3E9a7F9155451647592bEc7", + "proxy": "0x20FE3FD86C231fb8E28255452CEA7851f9C5f9c1", "implementation": "0xaD68bacb5A5BC14D3a919c260366cacF76884444", "version": "NONE" }, { "contract": "StableTokenBRL", - "proxy": "0xC458f5ab25a47741205722d465cDea9aB1E1154A", + "proxy": "0xB2Fd9852Ca3D69678286A8635d661690906A3E9d", "implementation": "0x687E05F04d0499EDEDFe89d6aed42Cc69F354a8A", "version": "NONE" }, { "contract": "StableTokenEUR", - "proxy": "0x06f60E083aDf016a98E3c7A1aFfa1c097B617aB9", + "proxy": "0x5930519559Ffa7528a00BE445734036471c443a2", "implementation": "0x8fAC402cAb89Ba28b244249319c093Abe75c4dED", "version": "NONE" }, { "contract": "UniswapFeeHandlerSeller", - "proxy": "0x3C9E3f84f95C1AEFbC8501aBcF882DA63F09DB78", - "implementation": "0xEF6022d615fE7B994edB74541E803E67414Da50e", - "version": "1.1.0.1" + "proxy": "0x33f9eFcF4d4834932D3958d6d1d5AE18F358406E", + "implementation": "0xfFcE963152Faf3e797a71582Ef6419a7E6204542", + "version": "2.0.0.0" }, { "contract": "Validators", - "proxy": "0x88a66D2608E66f82Bf445d8AFA13629a7c4ac718", - "implementation": "0x527edb2c6788b7D69b06E011E2F4Ac7deDfaFA3b", + "proxy": "0x0fEDbA6Ae0D2cD916FaB191aA822cf9fe41990Be", + "implementation": "0x2b8669A7f7066507a140CD4D60D1946ff864A0B0", "version": "1.3.0.0" } ] diff --git a/packages/cli/src/commands/network/__snapshots__/contracts.test.ts.snap b/packages/cli/src/commands/network/__snapshots__/contracts.test.ts.snap index 63f50bbed..70eb072f5 100644 --- a/packages/cli/src/commands/network/__snapshots__/contracts.test.ts.snap +++ b/packages/cli/src/commands/network/__snapshots__/contracts.test.ts.snap @@ -6,188 +6,188 @@ exports[`network:contracts runs 1`] = ` "[ { "contract": "Accounts", - "proxy": "0x3B4a625Ba01F298Fab94eda78e4e310704F9B658", - "implementation": "0x27f640a4f0C95Fd18432be400653113ce0b6a617", - "version": "1.1.5.0" + "proxy": "0x6e31AE4b9cC7A90ae038b8FBBEd2Eb95104BA8aE", + "implementation": "0x8b2172Dd4eEA915EFc7dCD186E1cC96B8D7E1632", + "version": "1.1.4.2" }, { "contract": "BlockchainParameters", - "proxy": "0xcb2921E8b22b3d5e8C034d5A1AaA594E24443587", - "implementation": "0xf604D0eDFd3Dc73Dc1DbC31ccf54b218cbF1862F", + "proxy": "0xff32a62a9f303e3cB4985CCbEA9122f320EcD154", + "implementation": "0x981E260e7a2d7a83C8F4bA78B40cc97AAB95EDF7", "version": "1.3.1.0" }, { "contract": "CeloUnreleasedTreasury", - "proxy": "0x7C9745752517812d2c7968741Fa8b1B578cFD441", - "implementation": "0xCcE3F693556cbed36759bC162E5e47705E0D7C2A", + "proxy": "0x621b99D7698395aD1A677d981a7F7Ae66cB4861f", + "implementation": "0x4657793c02091974B42d28aA46225A81c113C0C2", "version": "1.1.0.0" }, { "contract": "DoubleSigningSlasher", - "proxy": "0x031C3be2CC63d31226A0EA14FBfD83ae70A76fB1", - "implementation": "0x4e18F3711cDc6613ea630f1fDFB89a01500934c5", - "version": "1.1.2.0" + "proxy": "0x96402dEDCcA832F2874E0fD9626cba302B7495bB", + "implementation": "0x1e96753a534436d7D09bB5f0c9f2e7081A35bd4E", + "version": "1.1.1.1" }, { "contract": "DowntimeSlasher", - "proxy": "0x4c5160408DE5FFA4f4c25034D084c40aec3bA6fF", - "implementation": "0x60b6b1fAe1945ef53AAe72a3f7699708348298D6", - "version": "2.0.1.0" + "proxy": "0x1c82668A47EF53655fC7b473e39a6f8E46E8C154", + "implementation": "0xa1F0F1F2138007695f943872A502ae96ff1Ee9df", + "version": "2.0.0.1" }, { "contract": "Election", - "proxy": "0x947DB20Ef764841b4aD9335b0DdaB83B03AF25EC", - "implementation": "0x0dB1e9Ceb6627ac045a8D316E67b2638B31b4bBf", + "proxy": "0xcB4E4A207DC1C220bd54B2A983E32e923c32E544", + "implementation": "0x6710D9980C55D7963B4dA671A159523BB5b4F6d1", "version": "1.1.4.0" }, { "contract": "EpochManager", - "proxy": "0xbf13Ba354EeF22976Faf20b11E6dd5440514eE68", - "implementation": "0x2b1b73Ad62eFC51afE62D20b79B5e0bc41BBe333", + "proxy": "0x2E290D8c2D6b26985f2826A63Aa103963DbAca23", + "implementation": "0x3D70ab096AF8892b4C3CB652E9D7e1CceA6e25FC", "version": "1.1.0.0" }, { "contract": "EpochManagerEnabler", - "proxy": "0x8A6F9F2B407FD63a087D47b32A98A991d26298f0", - "implementation": "0x8b0D48E4CA18484aEDc3B50f28EEa342F68B3430", + "proxy": "0xeD2E802c08227c1b3DA3F502Ed9dcAA01616309B", + "implementation": "0x3fFcB4bf2D76C659Aea8AC6667C0C611576284aA", "version": "1.1.0.0" }, { "contract": "EpochRewards", - "proxy": "0x4573120f10c89671a0083d0361B6F3e535de6e6a", - "implementation": "0x5F5f8d61CC0a077CAFD24395a4876c80063c26BD", + "proxy": "0x535D5EbB846832A2d876380dBccCb84eE5521d3f", + "implementation": "0xB4C3e97Ee2acaeb7D840Fde692465903239f213E", "version": "1.1.2.0" }, { "contract": "Escrow", - "proxy": "0x37C08a3F428258e5B835a256b2FB69C52843989a", - "implementation": "0x4242e61cF23587b7d73da0b36b66CDCD6D6c9071", + "proxy": "0x69EeE27C1ace51A7a5306D41262D16B6838aDd88", + "implementation": "0xdc359C2E9586B93Ab41fC180079E6485Bc8963Fb", "version": "1.2.0.0" }, { "contract": "FederatedAttestations", - "proxy": "0x6470D27B61D39D4d430083C4D461b9deD5C36e19", - "implementation": "0xFE0393E974cd59c1000E50F1ae83289Ba3CD528B", + "proxy": "0x2972DF87DA881bf2E71ea8aF6dE6E8b2731e13e9", + "implementation": "0x6319822f850f649F23b6d2ABE6d3c68D26a11679", "version": "1.1.0.0" }, { "contract": "FeeCurrencyDirectory", - "proxy": "0x0eD091C4F1669B31A4C22408Ce44326a0914f8Ec", - "implementation": "0x06Ff7d743E523ac7743A37602b50cD16FD0921a3", + "proxy": "0x5a7D21C9255DAA32109c8136661D7e853Fc5BF63", + "implementation": "0xD1F6cdb1E576395076Eb1aF4E2b76037cbb59C95", "version": "1.1.0.0" }, { "contract": "FeeCurrencyWhitelist", - "proxy": "0xC4A33659f7cf6277bcE979E3Dbd968e19015472a", - "implementation": "0x6417714d1997497182DB4abcc5D17bB8efcd2055", + "proxy": "0xdc2aFCA04340Ff16Bf0ac722568F1F9832Cc6154", + "implementation": "0xcA4009932604dfe05A0bD453f31a55770016E681", "version": "NONE" }, { "contract": "FeeHandler", - "proxy": "0xC7Bbf9cF343A87B592aE9B0E9ee2c8E71D7f5387", - "implementation": "0x18bC41e7032e9e78A2b7D0232E91c0cD7a898121", - "version": "1.1.0.1" + "proxy": "0xeaEEC408eCbCdF9CDF21d0B1880419dF7290E2c9", + "implementation": "0x82106CcC8feAE0bEc797281ae4dDf5F77E3E6156", + "version": "1.2.0.0" }, { "contract": "Freezer", - "proxy": "0x72AFCee38f30f878468ef4B09784bab03Ebe7979", - "implementation": "0x3CDbA319Ea4ab399d3FD5281e0eE3443077fAffd", + "proxy": "0x1ab1c5cd627d5e51aD093FF6F9433309CD68597e", + "implementation": "0x5b782AF0BCFbA4a66b6441a9cE05A7954a6d9913", "version": "NONE" }, { "contract": "GasPriceMinimum", - "proxy": "0x50e744e3e818cBebB6251bB577E8D106E06C4D08", - "implementation": "0x64B7527B6fc6327403603FA5C9ADe48a6160808f", + "proxy": "0x9220E1A69bF1b9A26041ff582b7AdC4124D8364f", + "implementation": "0x541Cdf8Dd40cEC9bAF3824001776A0C4f842c08B", "version": "1.2.1.0" }, { "contract": "GoldToken", - "proxy": "0x53C4774Afa905093531dD7312a7171f78ba64e8E", - "implementation": "0x7B04141AB1EE8ECCd189015e7bF1294531785708", + "proxy": "0x84afC656f046C38D6022C2f02b9F667f028e1ef0", + "implementation": "0xd83c2018543B661B6e96810ca1B8b87a4B01e1a8", "version": "1.1.3.0" }, { "contract": "Governance", - "proxy": "0x1164B9e064bf1D8C3B70a70A4b6929d0488b6d0a", - "implementation": "0x4feBB2a68917ba1902EAA94934e67158Ef2E211C", - "version": "1.5.0.0" + "proxy": "0x2EB25B5eb9d5A4f61deb1e4F846343F862eB67D9", + "implementation": "0x063BDb2e9A86e8aD2ad9fc488e9E45Dc2a845c3a", + "version": "1.4.2.0" }, { "contract": "LockedGold", - "proxy": "0x08E6B8D57c7387364EbF5DD3bc34Ed96e97ff0bF", - "implementation": "0xFFdeBC16e42b199b8A8FC7f6D55Cc14da0b059A2", + "proxy": "0x619b4767f6A955E63ED7d334DF3384bc4eacFdB8", + "implementation": "0xaEeE10944B805Bda8Ef6d41645aDb36b24B3F9E1", "version": "1.1.5.0" }, { "contract": "MentoFeeHandlerSeller", - "proxy": "0x119e4B81Ea1E0cAb2222411216486d7B1e75f20C", - "implementation": "0x5b0605c44f4356b6F479f00fD5e3A1e6D22867Fc", - "version": "1.1.0.1" + "proxy": "0x4b08c6219147552F68A3D4CA0ab4737B531660e4", + "implementation": "0x5d301e716d607a0c43B8DfF4d6102a13c18FA961", + "version": "1.1.1.0" }, { "contract": "OdisPayments", - "proxy": "0xA538082B97D1059abd2B8Ea609517E4EF092C25f", - "implementation": "0x7c14920BF4319C81b6Ac73532e3a40eC794e548C", + "proxy": "0x8Cc7e63482Ca6Ee77E0D1820395289D07249de77", + "implementation": "0x5683019ff6BCEaaC2badD1d73F6Ff28500079b41", "version": "1.1.0.0" }, { "contract": "Random", - "proxy": "0x4e9E0C0C16d0bCb477bD819C626Fe2ad6C223C92", - "implementation": "0x854DeFc99Cc15b2deA3E2fdB69c4EDe9D8e111A7", + "proxy": "0xA9DB88ADd5d6910183F38D5d0A451868898C7C82", + "implementation": "0x93D3Af5d5aAb66fAeF41A9242E12307D1813d2B3", "version": "1.1.2.0" }, { "contract": "Registry", "proxy": "0x000000000000000000000000000000000000ce10", - "implementation": "0xd677807472E95cdC82CCbD79B84bAC8395187a8F", + "implementation": "0x67bd72d0101905B1928E56f3204058c8C2D53251", "version": "NONE" }, { "contract": "Reserve", - "proxy": "0x0080094aDe1b0D9337bE75c470d84aDC561Ac964", + "proxy": "0x153193d9b852Dd791565a2929110282976040e54", "implementation": "0x6DDBd2A88C55e28ac8283c43D1F7100C295283fb", "version": "1.1.2.2" }, { "contract": "ScoreManager", - "proxy": "0x150Cd14f6caeB9f9E16ca6B330B487822D4Ea00a", - "implementation": "0x154A296F3D0A618d85884D9F669309957D0cF63F", + "proxy": "0x26B262FbaB2E243a4CEFD2Dbde9e1C203BaCd732", + "implementation": "0x345E7101aa60eDe5864822FC3fb2E5d5f679C187", "version": "1.1.0.0" }, { "contract": "SortedOracles", - "proxy": "0xAa2b1051A90b6BCa493E844338307dCe6817F4d7", - "implementation": "0x8501aF1E5161026c363C46e025561DEFd007271E", + "proxy": "0xeA6aCD469A2C2F32E167a9Ce50db735B61e00A2a", + "implementation": "0x19f9025D0eF2Ea2025b51DCB7CEEC4845aaf2A5e", "version": "1.1.4.0" }, { "contract": "StableToken", - "proxy": "0x9cA64d4663B4A623C3E9a7F9155451647592bEc7", + "proxy": "0x20FE3FD86C231fb8E28255452CEA7851f9C5f9c1", "implementation": "0xaD68bacb5A5BC14D3a919c260366cacF76884444", "version": "NONE" }, { "contract": "StableTokenBRL", - "proxy": "0xC458f5ab25a47741205722d465cDea9aB1E1154A", + "proxy": "0xB2Fd9852Ca3D69678286A8635d661690906A3E9d", "implementation": "0x687E05F04d0499EDEDFe89d6aed42Cc69F354a8A", "version": "NONE" }, { "contract": "StableTokenEUR", - "proxy": "0x06f60E083aDf016a98E3c7A1aFfa1c097B617aB9", + "proxy": "0x5930519559Ffa7528a00BE445734036471c443a2", "implementation": "0x8fAC402cAb89Ba28b244249319c093Abe75c4dED", "version": "NONE" }, { "contract": "UniswapFeeHandlerSeller", - "proxy": "0x3C9E3f84f95C1AEFbC8501aBcF882DA63F09DB78", - "implementation": "0xEF6022d615fE7B994edB74541E803E67414Da50e", - "version": "1.1.0.1" + "proxy": "0x33f9eFcF4d4834932D3958d6d1d5AE18F358406E", + "implementation": "0xfFcE963152Faf3e797a71582Ef6419a7E6204542", + "version": "2.0.0.0" }, { "contract": "Validators", - "proxy": "0x88a66D2608E66f82Bf445d8AFA13629a7c4ac718", - "implementation": "0x527edb2c6788b7D69b06E011E2F4Ac7deDfaFA3b", + "proxy": "0x0fEDbA6Ae0D2cD916FaB191aA822cf9fe41990Be", + "implementation": "0x2b8669A7f7066507a140CD4D60D1946ff864A0B0", "version": "1.3.0.0" } ] diff --git a/packages/cli/src/commands/network/info.ts b/packages/cli/src/commands/network/info.ts index 48b8d400c..fb440a228 100644 --- a/packages/cli/src/commands/network/info.ts +++ b/packages/cli/src/commands/network/info.ts @@ -1,4 +1,3 @@ -import { isCel2 } from '@celo/connect' import { Flags } from '@oclif/core' import { BaseCommand } from '../../base' import { printValueMapRecursive } from '../../utils/cli' @@ -19,7 +18,7 @@ export default class Info extends BaseCommand { async run() { const kit = await this.getKit() const res = await this.parse(Info) - const isL2 = await isCel2(kit.connection.web3) + const isL2 = await this.isCel2() let latestEpochNumber: number let epochSize: number diff --git a/packages/cli/src/commands/network/parameters-l2.test.ts b/packages/cli/src/commands/network/parameters-l2.test.ts index 097952116..7421ade84 100644 --- a/packages/cli/src/commands/network/parameters-l2.test.ts +++ b/packages/cli/src/commands/network/parameters-l2.test.ts @@ -20,7 +20,7 @@ testWithAnvilL2('network:parameters', (web3) => { currentThreshold: 60000000000000000000 (~6.000e+19) electabilityThreshold: 0.001 electableValidators: - max: 100 + max: 110 min: 1 maxNumGroupsVotedFor: 10 totalVotes: 60000000000000000000000 (~6.000e+22) @@ -30,9 +30,9 @@ testWithAnvilL2('network:parameters', (web3) => { isTimeForNextEpoch: false FeeCurrencyDirectory: intrinsicGasForAlternativeFeeCurrency: - 0x06f60E083aDf016a98E3c7A1aFfa1c097B617aB9: 21000 (~2.100e+4) - 0x9cA64d4663B4A623C3E9a7F9155451647592bEc7: 21000 (~2.100e+4) - 0xC458f5ab25a47741205722d465cDea9aB1E1154A: 21000 (~2.100e+4) + 0x20FE3FD86C231fb8E28255452CEA7851f9C5f9c1: 21000 (~2.100e+4) + 0x5930519559Ffa7528a00BE445734036471c443a2: 21000 (~2.100e+4) + 0xB2Fd9852Ca3D69678286A8635d661690906A3E9d: 21000 (~2.100e+4) Governance: concurrentProposals: 3 dequeueFrequency: 4 hours @@ -52,7 +52,7 @@ testWithAnvilL2('network:parameters', (web3) => { Reserve: frozenReserveGoldDays: 0 frozenReserveGoldStartBalance: 0 - frozenReserveGoldStartDay: 19991 (~1.999e+4) + frozenReserveGoldStartDay: 20013 (~2.001e+4) otherReserveAddresses: tobinTaxStalenessThreshold: 3153600000 (~3.154e+9) diff --git a/packages/cli/src/commands/network/parameters.test.ts b/packages/cli/src/commands/network/parameters.test.ts index 4e5b4875a..a6447058f 100644 --- a/packages/cli/src/commands/network/parameters.test.ts +++ b/packages/cli/src/commands/network/parameters.test.ts @@ -26,7 +26,7 @@ testWithAnvilL1('network:parameters', (web3: Web3) => { currentThreshold: 60000000000000000000 (~6.000e+19) electabilityThreshold: 0.001 electableValidators: - max: 100 + max: 110 min: 1 maxNumGroupsVotedFor: 10 totalVotes: 60000000000000000000000 (~6.000e+22) @@ -67,7 +67,7 @@ testWithAnvilL1('network:parameters', (web3: Web3) => { Reserve: frozenReserveGoldDays: 0 frozenReserveGoldStartBalance: 0 - frozenReserveGoldStartDay: 19991 (~1.999e+4) + frozenReserveGoldStartDay: 20013 (~2.001e+4) otherReserveAddresses: tobinTaxStalenessThreshold: 3153600000 (~3.154e+9) diff --git a/packages/cli/src/commands/network/whitelist-l2.test.ts b/packages/cli/src/commands/network/whitelist-l2.test.ts index deba74a35..e2adf6b29 100644 --- a/packages/cli/src/commands/network/whitelist-l2.test.ts +++ b/packages/cli/src/commands/network/whitelist-l2.test.ts @@ -27,15 +27,15 @@ testWithAnvilL2('network:whitelist cmd', (web3: Web3) => { ", ], [ - " Celo Euro cEUR 0x06f60E083aDf016a98E3c7A1aFfa1c097B617aB9 0x06f60E083aDf016a98E3c7A1aFfa1c097B617aB9 18 false + " Celo Dollar cUSD 0x20FE3FD86C231fb8E28255452CEA7851f9C5f9c1 0x20FE3FD86C231fb8E28255452CEA7851f9C5f9c1 18 false ", ], [ - " Celo Dollar cUSD 0x9cA64d4663B4A623C3E9a7F9155451647592bEc7 0x9cA64d4663B4A623C3E9a7F9155451647592bEc7 18 false + " Celo Euro cEUR 0x5930519559Ffa7528a00BE445734036471c443a2 0x5930519559Ffa7528a00BE445734036471c443a2 18 false ", ], [ - " Celo Brazilian Real cREAL 0xC458f5ab25a47741205722d465cDea9aB1E1154A 0xC458f5ab25a47741205722d465cDea9aB1E1154A 18 false + " Celo Brazilian Real cREAL 0xB2Fd9852Ca3D69678286A8635d661690906A3E9d 0xB2Fd9852Ca3D69678286A8635d661690906A3E9d 18 false ", ], ] @@ -49,26 +49,26 @@ testWithAnvilL2('network:whitelist cmd', (web3: Web3) => { [ "[ { - "name": "Celo Euro", - "symbol": "cEUR", - "whitelisted": "0x06f60E083aDf016a98E3c7A1aFfa1c097B617aB9", - "token": "0x06f60E083aDf016a98E3c7A1aFfa1c097B617aB9", + "name": "Celo Dollar", + "symbol": "cUSD", + "whitelisted": "0x20FE3FD86C231fb8E28255452CEA7851f9C5f9c1", + "token": "0x20FE3FD86C231fb8E28255452CEA7851f9C5f9c1", "decimals": "18", "usesAdapter": "false" }, { - "name": "Celo Dollar", - "symbol": "cUSD", - "whitelisted": "0x9cA64d4663B4A623C3E9a7F9155451647592bEc7", - "token": "0x9cA64d4663B4A623C3E9a7F9155451647592bEc7", + "name": "Celo Euro", + "symbol": "cEUR", + "whitelisted": "0x5930519559Ffa7528a00BE445734036471c443a2", + "token": "0x5930519559Ffa7528a00BE445734036471c443a2", "decimals": "18", "usesAdapter": "false" }, { "name": "Celo Brazilian Real", "symbol": "cREAL", - "whitelisted": "0xC458f5ab25a47741205722d465cDea9aB1E1154A", - "token": "0xC458f5ab25a47741205722d465cDea9aB1E1154A", + "whitelisted": "0xB2Fd9852Ca3D69678286A8635d661690906A3E9d", + "token": "0xB2Fd9852Ca3D69678286A8635d661690906A3E9d", "decimals": "18", "usesAdapter": "false" } diff --git a/packages/cli/src/commands/network/whitelist.test.ts b/packages/cli/src/commands/network/whitelist.test.ts index 0dce6b180..19c577f6b 100644 --- a/packages/cli/src/commands/network/whitelist.test.ts +++ b/packages/cli/src/commands/network/whitelist.test.ts @@ -30,15 +30,15 @@ testWithAnvilL1('network:whitelist cmd', (web3: Web3) => { ", ], [ - " Celo Euro cEUR 0x06f60E083aDf016a98E3c7A1aFfa1c097B617aB9 0x06f60E083aDf016a98E3c7A1aFfa1c097B617aB9 18 false + " Celo Dollar cUSD 0x20FE3FD86C231fb8E28255452CEA7851f9C5f9c1 0x20FE3FD86C231fb8E28255452CEA7851f9C5f9c1 18 false ", ], [ - " Celo Dollar cUSD 0x9cA64d4663B4A623C3E9a7F9155451647592bEc7 0x9cA64d4663B4A623C3E9a7F9155451647592bEc7 18 false + " Celo Euro cEUR 0x5930519559Ffa7528a00BE445734036471c443a2 0x5930519559Ffa7528a00BE445734036471c443a2 18 false ", ], [ - " Celo Brazilian Real cREAL 0xC458f5ab25a47741205722d465cDea9aB1E1154A 0xC458f5ab25a47741205722d465cDea9aB1E1154A 18 false + " Celo Brazilian Real cREAL 0xB2Fd9852Ca3D69678286A8635d661690906A3E9d 0xB2Fd9852Ca3D69678286A8635d661690906A3E9d 18 false ", ], ] diff --git a/packages/cli/src/commands/transfer/celo.test.ts b/packages/cli/src/commands/transfer/celo.test.ts index 67493f144..022e42c87 100644 --- a/packages/cli/src/commands/transfer/celo.test.ts +++ b/packages/cli/src/commands/transfer/celo.test.ts @@ -196,9 +196,9 @@ testWithAnvilL1('transfer:celo cmd', (web3: Web3) => { ) ).rejects.toThrowErrorMatchingInlineSnapshot(` "0x1234567890123456789012345678901234567890 is not a valid fee currency. Available currencies: - 0x06f60E083aDf016a98E3c7A1aFfa1c097B617aB9 - Celo Euro (cEUR) - 0x9cA64d4663B4A623C3E9a7F9155451647592bEc7 - Celo Dollar (cUSD) - 0xC458f5ab25a47741205722d465cDea9aB1E1154A - Celo Brazilian Real (cREAL)" + 0x20FE3FD86C231fb8E28255452CEA7851f9C5f9c1 - Celo Dollar (cUSD) + 0x5930519559Ffa7528a00BE445734036471c443a2 - Celo Euro (cEUR) + 0xB2Fd9852Ca3D69678286A8635d661690906A3E9d - Celo Brazilian Real (cREAL)" `) }) }) diff --git a/packages/dev-utils/package.json b/packages/dev-utils/package.json index 360088739..7d2565516 100644 --- a/packages/dev-utils/package.json +++ b/packages/dev-utils/package.json @@ -32,7 +32,7 @@ "web3-core-helpers": "1.10.4" }, "devDependencies": { - "@celo/devchain-anvil": "12.0.0-canary.8", + "@celo/devchain-anvil": "12.0.0-canary.33", "@celo/typescript": "workspace:^", "@tsconfig/recommended": "^1.0.3", "@types/fs-extra": "^8.1.0", diff --git a/packages/sdk/contractkit/package.json b/packages/sdk/contractkit/package.json index 30455b6ff..71e5ccd55 100644 --- a/packages/sdk/contractkit/package.json +++ b/packages/sdk/contractkit/package.json @@ -27,7 +27,7 @@ }, "dependencies": { "@celo/abis": "11.0.0", - "@celo/abis-12": "npm:@celo/abis@12.0.0-canary.35", + "@celo/abis-12": "npm:@celo/abis@12.0.0-canary.60", "@celo/base": "^7.0.0-beta.0", "@celo/connect": "^6.0.3-beta.0", "@celo/utils": "^8.0.0-beta.0", diff --git a/packages/sdk/contractkit/src/kit-l2.test.ts b/packages/sdk/contractkit/src/kit-l2.test.ts index ad04c35d8..6c79af89a 100644 --- a/packages/sdk/contractkit/src/kit-l2.test.ts +++ b/packages/sdk/contractkit/src/kit-l2.test.ts @@ -1,7 +1,9 @@ import { StrongAddress } from '@celo/base' import { testWithAnvilL2 } from '@celo/dev-utils/lib/anvil-test' +import { timeTravel } from '@celo/dev-utils/lib/ganache-test' import Web3 from 'web3' import { ContractKit, newKitFromWeb3 } from './kit' +import { startAndFinishEpochProcess } from './test-utils/utils' testWithAnvilL2('kit', (web3: Web3) => { let kit: ContractKit @@ -10,8 +12,8 @@ testWithAnvilL2('kit', (web3: Web3) => { beforeAll(async () => { kit = newKitFromWeb3(web3) - const feeCurrencyWhitelist = await kit.contracts.getFeeCurrencyWhitelist() - const gasOptions = await feeCurrencyWhitelist.getWhitelist() + const feeCurrencyWhitelist = await kit.contracts.getFeeCurrencyDirectory() + const gasOptions = await feeCurrencyWhitelist.getAddresses() feeToken = gasOptions[0] }) @@ -24,7 +26,7 @@ testWithAnvilL2('kit', (web3: Web3) => { }) ).resolves.toMatchInlineSnapshot(` { - "feeCurrency": "0x06f60E083aDf016a98E3c7A1aFfa1c097B617aB9", + "feeCurrency": "0x20FE3FD86C231fb8E28255452CEA7851f9C5f9c1", "gas": 53001, "maxFeeInFeeCurrency": "54061020000000", "maxFeePerGas": "1000000000", @@ -58,7 +60,7 @@ testWithAnvilL2('kit', (web3: Web3) => { }) ).resolves.toMatchInlineSnapshot(` { - "feeCurrency": "0x06f60E083aDf016a98E3c7A1aFfa1c097B617aB9", + "feeCurrency": "0x20FE3FD86C231fb8E28255452CEA7851f9C5f9c1", "gas": "102864710371401736267367367", "maxFeeInFeeCurrency": "104922004578829770992714714340000000", "maxFeePerGas": "1000000000", @@ -68,4 +70,64 @@ testWithAnvilL2('kit', (web3: Web3) => { }) }) }) + + describe('epochs', () => { + let epochDuration: number + + beforeEach(async () => { + const epochManagerWrapper = await kit.contracts.getEpochManager() + epochDuration = await epochManagerWrapper.epochDuration() + + // Go 3 epochs ahead + for (let i = 0; i < 3; i++) { + await timeTravel(epochDuration * 2, web3) + await startAndFinishEpochProcess(kit) + } + + await timeTravel(epochDuration * 2, web3) + + const accounts = await kit.web3.eth.getAccounts() + + await epochManagerWrapper.startNextEpochProcess().sendAndWaitForReceipt({ + from: accounts[0], + }) + + await ( + await epochManagerWrapper.finishNextEpochProcessTx() + ).sendAndWaitForReceipt({ + from: accounts[0], + }) + }) + + it('gets the current epoch size', async () => { + expect(await kit.getEpochSize()).toEqual(epochDuration) + }) + + it('gets first and last block number of an epoch', async () => { + expect(await kit.getFirstBlockNumberForEpoch(4)).toEqual(300) + expect(await kit.getLastBlockNumberForEpoch(4)).toEqual(352) + + expect(await kit.getFirstBlockNumberForEpoch(5)).toEqual(353) + expect(await kit.getLastBlockNumberForEpoch(5)).toEqual(355) + + expect(await kit.getFirstBlockNumberForEpoch(6)).toEqual(356) + expect(await kit.getLastBlockNumberForEpoch(6)).toEqual(358) + + expect(await kit.getFirstBlockNumberForEpoch(7)).toEqual(359) + expect(await kit.getLastBlockNumberForEpoch(7)).toEqual(361) + + expect(await kit.getFirstBlockNumberForEpoch(8)).toEqual(362) + }) + + it('gets the current epoch number', async () => { + expect(await kit.getEpochNumberOfBlock(300)).toEqual(4) + expect(await kit.getEpochNumberOfBlock(357)).toEqual(6) + expect(await kit.getEpochNumberOfBlock(361)).toEqual(7) + expect(await kit.getEpochNumberOfBlock(362)).toEqual(8) + }) + + it('throws when block number is out of range for L2', async () => { + await expect(kit.getEpochNumberOfBlock(363)).rejects.toThrow() + }) + }) }) diff --git a/packages/sdk/contractkit/src/kit.test.ts b/packages/sdk/contractkit/src/kit.test.ts index eee10e56f..362d74550 100644 --- a/packages/sdk/contractkit/src/kit.test.ts +++ b/packages/sdk/contractkit/src/kit.test.ts @@ -272,4 +272,19 @@ testWithAnvilL1('kit', (web3: Web3) => { ).resolves.toEqual(BigInt(51)) }) }) + + describe('epochs', () => { + it('gets the current epoch size', async () => { + expect(await kit.getEpochSize()).toEqual(100) + }) + + it('gets first and last block number of an epoch', async () => { + expect(await kit.getFirstBlockNumberForEpoch(2)).toEqual(101) + expect(await kit.getLastBlockNumberForEpoch(2)).toEqual(200) + }) + + it('gets the current epoch number', async () => { + expect(await kit.getEpochNumberOfBlock(300)).toEqual(3) + }) + }) }) diff --git a/packages/sdk/contractkit/src/kit.ts b/packages/sdk/contractkit/src/kit.ts index 0d98611bb..2cb0b0d92 100644 --- a/packages/sdk/contractkit/src/kit.ts +++ b/packages/sdk/contractkit/src/kit.ts @@ -86,6 +86,7 @@ interface AccountBalance extends EachCeloToken { lockedCELO: BigNumber pending: BigNumber } + /* * ContractKit provides a convenient interface for All Celo Contracts * @@ -214,36 +215,62 @@ export class ContractKit { } this.connection.defaultFeeCurrency = address } - /* - * @deprecated - epoch related methods will be removed from contractkit + + /** + * This method returns for: + * - L1: epoch size (in blocks) + * - L2: epoch duration (in seconds) */ async getEpochSize(): Promise { - const blockchainParamsWrapper = await this.contracts.getBlockchainParameters() - return blockchainParamsWrapper.getEpochSizeNumber() + if (!(await isCel2(this.web3))) { + const blockchainParamsWrapper = await this.contracts.getBlockchainParameters() + + return blockchainParamsWrapper.getEpochSizeNumber() + } + + const epochManagerWrapper = await this.contracts.getEpochManager() + + return epochManagerWrapper.epochDuration() } - /* - * @deprecated - epoch related methods will be removed from contractkit - */ async getFirstBlockNumberForEpoch(epochNumber: number): Promise { - const blockchainParamsWrapper = await this.contracts.getBlockchainParameters() - return blockchainParamsWrapper.getFirstBlockNumberForEpoch(epochNumber) + if (!(await isCel2(this.web3))) { + const blockchainParamsWrapper = await this.contracts.getBlockchainParameters() + + return blockchainParamsWrapper.getFirstBlockNumberForEpoch(epochNumber) + } + + const epochManagerWrapper = await this.contracts.getEpochManager() + + return await epochManagerWrapper.getFirstBlockAtEpoch(epochNumber) } - /* - * @deprecated - epoch related methods will be removed from contractkit - */ async getLastBlockNumberForEpoch(epochNumber: number): Promise { - const blockchainParamsWrapper = await this.contracts.getBlockchainParameters() - return blockchainParamsWrapper.getLastBlockNumberForEpoch(epochNumber) + if (!(await isCel2(this.web3))) { + const blockchainParamsWrapper = await this.contracts.getBlockchainParameters() + + return blockchainParamsWrapper.getLastBlockNumberForEpoch(epochNumber) + } + + const epochManagerWrapper = await this.contracts.getEpochManager() + + return await epochManagerWrapper.getLastBlockAtEpoch(epochNumber) } - /* - * @deprecated - epoch related methods will be removed from contractkit - */ async getEpochNumberOfBlock(blockNumber: number): Promise { - const blockchainParamsWrapper = await this.contracts.getBlockchainParameters() - return blockchainParamsWrapper.getEpochNumberOfBlock(blockNumber) + if (!(await isCel2(this.web3))) { + const blockchainParamsWrapper = await this.contracts.getBlockchainParameters() + + return blockchainParamsWrapper.getEpochNumberOfBlock(blockNumber) + } + + const epochManagerWrapper = await this.contracts.getEpochManager() + + try { + return epochManagerWrapper.getEpochNumberOfBlock(blockNumber) + } catch (_) { + throw new Error(`Block number ${blockNumber} is not in any known L2 epoch`) + } } /* diff --git a/packages/sdk/contractkit/src/wrappers/BaseWrapperForGoverning.ts b/packages/sdk/contractkit/src/wrappers/BaseWrapperForGoverning.ts index d669191c2..2e5022e42 100644 --- a/packages/sdk/contractkit/src/wrappers/BaseWrapperForGoverning.ts +++ b/packages/sdk/contractkit/src/wrappers/BaseWrapperForGoverning.ts @@ -3,6 +3,7 @@ import { AccountsWrapper } from './Accounts' import { BaseWrapper } from './BaseWrapper' import { BlockchainParametersWrapper } from './BlockchainParameters' import { ElectionWrapper } from './Election' +import { EpochManagerWrapper } from './EpochManager' import { LockedGoldWrapper } from './LockedGold' import { MultiSigWrapper } from './MultiSig' import { ScoreManagerWrapper } from './ScoreManager' @@ -16,6 +17,7 @@ interface ContractWrappersForVotingAndRules { getScoreManager: () => Promise getMultiSig: (address: string) => Promise getBlockchainParameters: () => Promise + getEpochManager: () => Promise } /** @internal */ diff --git a/packages/sdk/contractkit/src/wrappers/DowntimeSlasher-l2.test.ts b/packages/sdk/contractkit/src/wrappers/DowntimeSlasher-l2.test.ts new file mode 100644 index 000000000..9193cd938 --- /dev/null +++ b/packages/sdk/contractkit/src/wrappers/DowntimeSlasher-l2.test.ts @@ -0,0 +1,36 @@ +import { testWithAnvilL2 } from '@celo/dev-utils/lib/anvil-test' +import { mineBlocks, timeTravel } from '@celo/dev-utils/lib/ganache-test' +import Web3 from 'web3' +import { ContractKit, newKitFromWeb3 } from '../kit' +import { startAndFinishEpochProcess } from '../test-utils/utils' + +testWithAnvilL2('DowntimeSlasherWrapper', (web3: Web3) => { + let kit: ContractKit + + beforeEach(async () => { + kit = newKitFromWeb3(web3) + const epochManagerWrapper = await kit.contracts.getEpochManager() + const epochDuration = await epochManagerWrapper.epochDuration() + const downtimeSlasherWrapper = await kit.contracts.getDowntimeSlasher() + + // Go 3 epochs ahead + for (let i = 0; i < 3; i++) { + await timeTravel(epochDuration * 2, web3) + await mineBlocks(await downtimeSlasherWrapper.slashableDowntime(), web3) + await startAndFinishEpochProcess(kit) + } + }) + + it('calculates slashable downtime intervals', async () => { + const wrapper = await kit.contracts.getDowntimeSlasher() + + expect(await wrapper.slashableDowntimeIntervalsBefore()).toMatchInlineSnapshot(` + [ + { + "end": 537, + "start": 478, + }, + ] + `) + }) +}) diff --git a/packages/sdk/contractkit/src/wrappers/DowntimeSlasher.test.ts b/packages/sdk/contractkit/src/wrappers/DowntimeSlasher.test.ts new file mode 100644 index 000000000..2e075ed5a --- /dev/null +++ b/packages/sdk/contractkit/src/wrappers/DowntimeSlasher.test.ts @@ -0,0 +1,23 @@ +import { testWithAnvilL1 } from '@celo/dev-utils/lib/anvil-test' +import Web3 from 'web3' +import { newKitFromWeb3 } from '../kit' + +testWithAnvilL1('DowntimeSlasherWrapper', (web3: Web3) => { + it('calculates slashable downtime intervals', async () => { + const kit = newKitFromWeb3(web3) + const wrapper = await kit.contracts.getDowntimeSlasher() + + expect(await wrapper.slashableDowntimeIntervalsBefore()).toMatchInlineSnapshot(` + [ + { + "end": 300, + "start": 288, + }, + { + "end": 347, + "start": 301, + }, + ] + `) + }) +}) diff --git a/packages/sdk/contractkit/src/wrappers/DowntimeSlasher.ts b/packages/sdk/contractkit/src/wrappers/DowntimeSlasher.ts index d3ad94baf..8e821b0b0 100644 --- a/packages/sdk/contractkit/src/wrappers/DowntimeSlasher.ts +++ b/packages/sdk/contractkit/src/wrappers/DowntimeSlasher.ts @@ -1,5 +1,5 @@ import { DowntimeSlasher } from '@celo/abis/web3/DowntimeSlasher' -import { Address } from '@celo/connect' +import { Address, isCel2 } from '@celo/connect' import BigNumber from 'bignumber.js' import { BaseSlasher } from './BaseSlasher' import { @@ -99,16 +99,22 @@ export class DowntimeSlasherWrapper extends BaseSlasher { block?: number, maximumLength = 4000 ): Promise { - const [window, blockchainParamsWrapper] = await Promise.all([ + const [window, blockchainParamsWrapper, epochManagerWrapper] = await Promise.all([ this.getSlashableDowntimeWindow(undefined, block), this.contracts.getBlockchainParameters(), + this.contracts.getEpochManager(), ]) let end = window.end const intervals: Interval[] = [] + const isL2 = await isCel2(this.connection.web3) while (end > window.start) { - const epochNumber = await blockchainParamsWrapper.getEpochNumberOfBlock(end) - const firstBlock = await blockchainParamsWrapper.getFirstBlockNumberForEpoch(epochNumber) + const epochNumber = isL2 + ? await epochManagerWrapper.getEpochNumberOfBlock(end) + : await blockchainParamsWrapper.getEpochNumberOfBlock(end) + const firstBlock = isL2 + ? await epochManagerWrapper.getFirstBlockAtEpoch(epochNumber) + : await blockchainParamsWrapper.getFirstBlockNumberForEpoch(epochNumber) const start = Math.max(window.start, end - maximumLength, firstBlock) intervals.push({ start, end }) end = start - 1 diff --git a/packages/sdk/contractkit/src/wrappers/EpochManager.test.ts b/packages/sdk/contractkit/src/wrappers/EpochManager.test.ts index bc1e574e2..97875c197 100644 --- a/packages/sdk/contractkit/src/wrappers/EpochManager.test.ts +++ b/packages/sdk/contractkit/src/wrappers/EpochManager.test.ts @@ -19,7 +19,7 @@ testWithAnvilL2('EpochManagerWrapper', (web3: Web3) => { const epochManagerWrapper = await kit.contracts.getEpochManager() expect(epochManagerWrapper.address).toMatchInlineSnapshot( - `"0xbf13Ba354EeF22976Faf20b11E6dd5440514eE68"` + `"0x2E290D8c2D6b26985f2826A63Aa103963DbAca23"` ) }) @@ -38,7 +38,7 @@ testWithAnvilL2('EpochManagerWrapper', (web3: Web3) => { it('gets elected validators', async () => { const epochManagerWrapper = await kit.contracts.getEpochManager() - expect(await epochManagerWrapper.getElected()).toMatchInlineSnapshot(` + expect(await epochManagerWrapper.getElectedAccounts()).toMatchInlineSnapshot(` [ "0x15d34AAf54267DB7D7c367839AAf71A00a2C6A65", "0x9965507D1a55bcC2695C58ba16FB37d819B0A4dc", @@ -119,6 +119,7 @@ testWithAnvilL2('EpochManagerWrapper', (web3: Web3) => { } it('starts and finishes a number of epochs', async () => { + const accounts = await kit.web3.eth.getAccounts() const epochManagerWrapper = await kit.contracts.getEpochManager() const EPOCH_COUNT = 5 @@ -137,10 +138,16 @@ testWithAnvilL2('EpochManagerWrapper', (web3: Web3) => { } expect(await epochManagerWrapper.getCurrentEpochNumber()).toEqual(10) + expect((await epochManagerWrapper.getEpochProcessingStatus()).status).toEqual(0) + + // Start a new epoch process, but not finish it, so we can check the amounts + await timeTravel(EPOCH_DURATION + 1, web3) + await epochManagerWrapper.startNextEpochProcess().sendAndWaitForReceipt({ + from: accounts[0], + }) const status = await epochManagerWrapper.getEpochProcessingStatus() - expect(status.status).toEqual(0) expect(status.totalRewardsVoter.toNumber()).toBeGreaterThan(0) expect(status.perValidatorReward.toNumber()).toBeGreaterThan(0) expect(status.totalRewardsCommunity.toNumber()).toBeGreaterThan(0) diff --git a/packages/sdk/contractkit/src/wrappers/EpochManager.ts b/packages/sdk/contractkit/src/wrappers/EpochManager.ts index 2f4b032ed..3dd3f14b7 100644 --- a/packages/sdk/contractkit/src/wrappers/EpochManager.ts +++ b/packages/sdk/contractkit/src/wrappers/EpochManager.ts @@ -40,9 +40,14 @@ export class EpochManagerWrapper extends BaseWrapperForGoverning { valueToInt ) getLastBlockAtEpoch = proxyCall(this.contract.methods.getLastBlockAtEpoch, undefined, valueToInt) + getEpochNumberOfBlock = proxyCall( + this.contract.methods.getEpochNumberOfBlock, + undefined, + valueToInt + ) isOnEpochProcess = proxyCall(this.contract.methods.isOnEpochProcess) isTimeForNextEpoch = proxyCall(this.contract.methods.isTimeForNextEpoch) - getElected = proxyCall(this.contract.methods.getElected) + getElectedAccounts = proxyCall(this.contract.methods.getElectedAccounts) getEpochProcessingStatus = proxyCall( this.contract.methods.epochProcessing, undefined, @@ -61,7 +66,7 @@ export class EpochManagerWrapper extends BaseWrapperForGoverning { finishNextEpochProcess = proxySend(this.connection, this.contract.methods.finishNextEpochProcess) finishNextEpochProcessTx = async () => { - const elected = await this.getElected() + const elected = await this.getElectedAccounts() const validators = await this.contracts.getValidators() const electedGroups = new Set( diff --git a/packages/sdk/contractkit/src/wrappers/FeeCurrencyDirectoryWrapper.test.ts b/packages/sdk/contractkit/src/wrappers/FeeCurrencyDirectoryWrapper.test.ts index f4a946c6b..557457736 100644 --- a/packages/sdk/contractkit/src/wrappers/FeeCurrencyDirectoryWrapper.test.ts +++ b/packages/sdk/contractkit/src/wrappers/FeeCurrencyDirectoryWrapper.test.ts @@ -12,21 +12,21 @@ testWithAnvilL1('FeeCurrencyDirectory', (web3) => { [ { "adaptedToken": undefined, - "address": "0x06f60E083aDf016a98E3c7A1aFfa1c097B617aB9", + "address": "0x20FE3FD86C231fb8E28255452CEA7851f9C5f9c1", "decimals": 18, - "name": "Celo Euro", - "symbol": "cEUR", + "name": "Celo Dollar", + "symbol": "cUSD", }, { "adaptedToken": undefined, - "address": "0x9cA64d4663B4A623C3E9a7F9155451647592bEc7", + "address": "0x5930519559Ffa7528a00BE445734036471c443a2", "decimals": 18, - "name": "Celo Dollar", - "symbol": "cUSD", + "name": "Celo Euro", + "symbol": "cEUR", }, { "adaptedToken": undefined, - "address": "0xC458f5ab25a47741205722d465cDea9aB1E1154A", + "address": "0xB2Fd9852Ca3D69678286A8635d661690906A3E9d", "decimals": 18, "name": "Celo Brazilian Real", "symbol": "cREAL", @@ -37,7 +37,8 @@ testWithAnvilL1('FeeCurrencyDirectory', (web3) => { it('fetches exchange rate', async () => { const wrapper = await kit.contracts.getFeeCurrencyDirectory() - const exchangeRate = await wrapper.getExchangeRate('0x06f60E083aDf016a98E3c7A1aFfa1c097B617aB9') + const addresses = await wrapper.getAddresses() + const exchangeRate = await wrapper.getExchangeRate(addresses[0]) expect(exchangeRate.denominator).toEqual(new BigNumber('1000000000000000000000000')) expect(exchangeRate.numerator).toEqual(new BigNumber('1000000000000000000000000')) @@ -45,13 +46,12 @@ testWithAnvilL1('FeeCurrencyDirectory', (web3) => { it('fetches currency config', async () => { const wrapper = await kit.contracts.getFeeCurrencyDirectory() - const currencyConfig = await wrapper.getCurrencyConfig( - '0x06f60E083aDf016a98E3c7A1aFfa1c097B617aB9' - ) + const addresses = await wrapper.getAddresses() + const currencyConfig = await wrapper.getCurrencyConfig(addresses[0]) expect(currencyConfig).toMatchInlineSnapshot(` { "intrinsicGas": "21000", - "oracle": "0xAa2b1051A90b6BCa493E844338307dCe6817F4d7", + "oracle": "0xeA6aCD469A2C2F32E167a9Ce50db735B61e00A2a", } `) }) @@ -63,9 +63,9 @@ testWithAnvilL1('FeeCurrencyDirectory', (web3) => { expect(config).toMatchInlineSnapshot(` { "intrinsicGasForAlternativeFeeCurrency": { - "0x06f60E083aDf016a98E3c7A1aFfa1c097B617aB9": "21000", - "0x9cA64d4663B4A623C3E9a7F9155451647592bEc7": "21000", - "0xC458f5ab25a47741205722d465cDea9aB1E1154A": "21000", + "0x20FE3FD86C231fb8E28255452CEA7851f9C5f9c1": "21000", + "0x5930519559Ffa7528a00BE445734036471c443a2": "21000", + "0xB2Fd9852Ca3D69678286A8635d661690906A3E9d": "21000", }, } `) diff --git a/packages/sdk/contractkit/src/wrappers/FeeCurrencyWhitelistWrapper.test.ts b/packages/sdk/contractkit/src/wrappers/FeeCurrencyWhitelistWrapper.test.ts index be76aead1..34c29049c 100644 --- a/packages/sdk/contractkit/src/wrappers/FeeCurrencyWhitelistWrapper.test.ts +++ b/packages/sdk/contractkit/src/wrappers/FeeCurrencyWhitelistWrapper.test.ts @@ -11,21 +11,21 @@ testWithAnvilL1('FeeCurrencyWhitelist', (web3) => { [ { "adaptedToken": undefined, - "address": "0x06f60E083aDf016a98E3c7A1aFfa1c097B617aB9", + "address": "0x20FE3FD86C231fb8E28255452CEA7851f9C5f9c1", "decimals": 18, - "name": "Celo Euro", - "symbol": "cEUR", + "name": "Celo Dollar", + "symbol": "cUSD", }, { "adaptedToken": undefined, - "address": "0x9cA64d4663B4A623C3E9a7F9155451647592bEc7", + "address": "0x5930519559Ffa7528a00BE445734036471c443a2", "decimals": 18, - "name": "Celo Dollar", - "symbol": "cUSD", + "name": "Celo Euro", + "symbol": "cEUR", }, { "adaptedToken": undefined, - "address": "0xC458f5ab25a47741205722d465cDea9aB1E1154A", + "address": "0xB2Fd9852Ca3D69678286A8635d661690906A3E9d", "decimals": 18, "name": "Celo Brazilian Real", "symbol": "cREAL", diff --git a/packages/sdk/contractkit/src/wrappers/Governance-l2.test.ts b/packages/sdk/contractkit/src/wrappers/Governance-l2.test.ts index 701471aaf..61ea9694a 100644 --- a/packages/sdk/contractkit/src/wrappers/Governance-l2.test.ts +++ b/packages/sdk/contractkit/src/wrappers/Governance-l2.test.ts @@ -5,13 +5,13 @@ import { ContractVersion } from '../versions' testWithAnvilL2('GovernanceWrapper', (web3: Web3) => { describe('Hotfixes', () => { - it('gets L2 hotfix record for version >= 1.5.0.0', async () => { + it('gets L2 hotfix record for version >= 1.4.2.0', async () => { const kit = newKitFromWeb3(web3) const governance = await kit.contracts.getGovernance() const hotfixHash = Buffer.from('0x', 'hex') - // Sanity check to make sure we're on at least 1.5.0.0 version - expect((await governance.version()).isAtLeast(new ContractVersion(1, 5, 0, 0))) + // Sanity check to make sure we're on at least 1.4.2.0 version + expect((await governance.version()).isAtLeast(new ContractVersion(1, 4, 2, 0))).toBeTruthy() const hotfixRecordL2 = await governance.getHotfixRecord(hotfixHash) expect(hotfixRecordL2).toMatchInlineSnapshot(` diff --git a/packages/sdk/contractkit/src/wrappers/Governance.test.ts b/packages/sdk/contractkit/src/wrappers/Governance.test.ts index ed5200404..f5289ab25 100644 --- a/packages/sdk/contractkit/src/wrappers/Governance.test.ts +++ b/packages/sdk/contractkit/src/wrappers/Governance.test.ts @@ -15,10 +15,10 @@ import { MultiSigWrapper } from './MultiSig' // Only on ganache we can test 1.4.1.0 version testWithGanache('Governance Wrapper', (web3: Web3) => { describe('Hotfixes', () => { - it('gets L1 hotfix record pre 1.5.0.0', async () => { + it('gets L1 hotfix record pre 1.4.2.0', async () => { const kit = newKitFromWeb3(web3) const governance = await kit.contracts.getGovernance() - // Sanity check to make sure we're pre 1.5.0.0 + // Sanity check to make sure we're pre 1.4.2.0 expect((await governance.version()).toString()).toBe('1.4.1.0') const hotfixRecord = await governance.getHotfixRecord(Buffer.from('0x', 'hex')) @@ -296,13 +296,13 @@ testWithAnvilL1('Governance Wrapper', (web3: Web3) => { }) describe('Hotfixes', () => { - it('gets L1 hotfix record for version >= 1.5.0.0', async () => { + it('gets L1 hotfix record for version >= 1.4.2.0', async () => { const kit = newKitFromWeb3(web3) const governance = await kit.contracts.getGovernance() const hotfixHash = Buffer.from('0x', 'hex') - // Sanity check to make sure we're on at least 1.5.0.0 version - expect((await governance.version()).isAtLeast(new ContractVersion(1, 5, 0, 0))) + // Sanity check to make sure we're on at least 1.4.2.0 version + expect((await governance.version()).isAtLeast(new ContractVersion(1, 4, 2, 0))).toBeTruthy() // Test L1 context const hotfixRecordL1 = await governance.getHotfixRecord(hotfixHash) diff --git a/packages/sdk/contractkit/src/wrappers/Governance.ts b/packages/sdk/contractkit/src/wrappers/Governance.ts index ff1df7bd1..da997f253 100644 --- a/packages/sdk/contractkit/src/wrappers/Governance.ts +++ b/packages/sdk/contractkit/src/wrappers/Governance.ts @@ -904,7 +904,7 @@ export class GovernanceWrapper extends BaseWrapperForGoverning { async getHotfixRecord(hash: Buffer): Promise { const version = await this.version() - if (version.isAtLeast(new ContractVersion(1, 5, 0, 0))) { + if (version.isAtLeast(new ContractVersion(1, 4, 2, 0))) { if (await isCel2(this.connection.web3)) { // is L2 const res = await this.contract.methods.getL2HotfixRecord(bufferToHex(hash)).call() diff --git a/packages/sdk/contractkit/src/wrappers/ScoreManager.test.ts b/packages/sdk/contractkit/src/wrappers/ScoreManager.test.ts index 8539b7f35..cbc419ed7 100644 --- a/packages/sdk/contractkit/src/wrappers/ScoreManager.test.ts +++ b/packages/sdk/contractkit/src/wrappers/ScoreManager.test.ts @@ -13,7 +13,7 @@ testWithAnvilL2('ScoreManager Wrapper', (web3) => { it('gets validator score', async () => { const epochManagerWrapper = await kit.contracts.getEpochManager() const scoreManagerWrapper = await kit.contracts.getScoreManager() - const electedValidatorAddresses = await epochManagerWrapper.getElected() + const electedValidatorAddresses = await epochManagerWrapper.getElectedAccounts() // default score is 1 expect( diff --git a/yarn.lock b/yarn.lock index 09a02fee2..322d24a68 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1624,10 +1624,10 @@ __metadata: languageName: node linkType: hard -"@celo/abis-12@npm:@celo/abis@12.0.0-canary.35": - version: 12.0.0-canary.35 - resolution: "@celo/abis@npm:12.0.0-canary.35" - checksum: 0735d278d056a7b688bddd1d670fa595446efea0d71086ccef627dd37ff9d70c02435854c2b60bd2967bc9f1a7a790fc8b6a42f3d0ab8c352357b1d42e65e4e0 +"@celo/abis-12@npm:@celo/abis@12.0.0-canary.60": + version: 12.0.0-canary.60 + resolution: "@celo/abis@npm:12.0.0-canary.60" + checksum: 605aa68b6d7e2cd43b6a0d8115a44e3ace8416c49401c6559f173461c873ce2a8a1867c0a5dab5be05549f6a7e1d2249c57506a4633643a90694c0a011cf638d languageName: node linkType: hard @@ -1826,7 +1826,7 @@ __metadata: resolution: "@celo/contractkit@workspace:packages/sdk/contractkit" dependencies: "@celo/abis": "npm:11.0.0" - "@celo/abis-12": "npm:@celo/abis@12.0.0-canary.35" + "@celo/abis-12": "npm:@celo/abis@12.0.0-canary.60" "@celo/base": "npm:^7.0.0-beta.0" "@celo/celo-devchain": "npm:^7.0.0" "@celo/connect": "npm:^6.0.3-beta.0" @@ -1879,7 +1879,7 @@ __metadata: dependencies: "@celo/abis": "npm:^11.0.0" "@celo/connect": "npm:^6.0.3-beta.0" - "@celo/devchain-anvil": "npm:12.0.0-canary.8" + "@celo/devchain-anvil": "npm:12.0.0-canary.33" "@celo/typescript": "workspace:^" "@tsconfig/recommended": "npm:^1.0.3" "@types/fs-extra": "npm:^8.1.0" @@ -1895,10 +1895,10 @@ __metadata: languageName: unknown linkType: soft -"@celo/devchain-anvil@npm:12.0.0-canary.8": - version: 12.0.0-canary.8 - resolution: "@celo/devchain-anvil@npm:12.0.0-canary.8" - checksum: 128d1b4a0d841b171df6b4d02aedb0e1b1f29d9ce3c0f1d6e86e7451b3945d9ca3fd0745c2504f4e78a72b1d8bf762198d5a563dc7c6cdab640e8ce1c7fba1fd +"@celo/devchain-anvil@npm:12.0.0-canary.33": + version: 12.0.0-canary.33 + resolution: "@celo/devchain-anvil@npm:12.0.0-canary.33" + checksum: 010b061f3c43b959f201b7aaf56e0d8c1d7558d341e4b5f905a1d445cefc8f8acc1f667d536aa2de40f7f1d850d5af611184e9740c31ff32a8c76266946834f3 languageName: node linkType: hard From 389022056be15c0677b37d4cfaf332afcb652e02 Mon Sep 17 00:00:00 2001 From: Aaron DeRuvo Date: Tue, 29 Oct 2024 13:01:31 +0100 Subject: [PATCH 14/54] Removing temp commands from cli (#407) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit the gold command was always meant to be a temporary alias, and the recover-old was intended to be a temporarily needed command. --- ## PR-Codex overview This PR focuses on the removal of deprecated commands from the `celocli` CLI tool, specifically `transfer:gold` and `account:recover-old`, along with updates to related documentation. ### Detailed summary - Removed the command `celocli transfer:gold`, replaced by `celocli transfer:celo`. - Removed the command `celocli account:recover-old`, intended for migrating accounts from a beta version of Valora. - Updated `package.json` to change the `clean` script. - Updated documentation to reflect the removal of the above commands. > ✨ Ask PR-Codex anything about this PR by commenting with `/codex {your question}` --- .changeset/chilled-cycles-smell.md | 5 ++ .changeset/good-trees-reply.md | 6 ++ docs/command-line-interface/account.md | 69 ------------------- docs/command-line-interface/transfer.md | 37 ---------- packages/cli/package.json | 2 +- .../cli/src/commands/account/recover-old.ts | 60 ---------------- packages/cli/src/commands/transfer/gold.ts | 14 ---- 7 files changed, 12 insertions(+), 181 deletions(-) create mode 100644 .changeset/chilled-cycles-smell.md create mode 100644 .changeset/good-trees-reply.md delete mode 100644 packages/cli/src/commands/account/recover-old.ts delete mode 100644 packages/cli/src/commands/transfer/gold.ts diff --git a/.changeset/chilled-cycles-smell.md b/.changeset/chilled-cycles-smell.md new file mode 100644 index 000000000..a36bfb9e2 --- /dev/null +++ b/.changeset/chilled-cycles-smell.md @@ -0,0 +1,5 @@ +--- +'@celo/celocli': major +--- + +Remove transfer:gold -- this was an old alias for transfer:celo which has the same functionality diff --git a/.changeset/good-trees-reply.md b/.changeset/good-trees-reply.md new file mode 100644 index 000000000..38e111ba9 --- /dev/null +++ b/.changeset/good-trees-reply.md @@ -0,0 +1,6 @@ +--- +'@celo/celocli': major +--- +Remove account:recover-old + +This was meant to be a temporary command for migrating account from a beta version of Valora to the release version. Please use a previous version of celocli if you need to make this one time recovery. \ No newline at end of file diff --git a/docs/command-line-interface/account.md b/docs/command-line-interface/account.md index 7692c5689..c541c5a0e 100644 --- a/docs/command-line-interface/account.md +++ b/docs/command-line-interface/account.md @@ -21,7 +21,6 @@ Manage your account, keys, and metadata * [`celocli account:offchain-read ARG1`](#celocli-accountoffchain-read-arg1) * [`celocli account:offchain-write`](#celocli-accountoffchain-write) * [`celocli account:proof-of-possession`](#celocli-accountproof-of-possession) -* [`celocli account:recover-old`](#celocli-accountrecover-old) * [`celocli account:register`](#celocli-accountregister) * [`celocli account:register-data-encryption-key`](#celocli-accountregister-data-encryption-key) * [`celocli account:register-metadata`](#celocli-accountregister-metadata) @@ -781,74 +780,6 @@ EXAMPLES _See code: [src/commands/account/proof-of-possession.ts](https://github.com/celo-org/developer-tooling/tree/master/packages/cli/src/commands/account/proof-of-possession.ts)_ -## `celocli account:recover-old` - -Recovers the Valora old account and print out the key information. The old Valora app (in a beta state) generated the user address using a seed of 32 bytes, instead of 64 bytes. As the app fixed that, some old accounts were left with some funds. This command allows the user to recover those funds. - -``` -USAGE - $ celocli account:recover-old --mnemonicPath [--gasCurrency - 0x1234567890123456789012345678901234567890] [--globalHelp] [--passphrasePath - ] [--changeIndex ] [--addressIndex ] [--language chinese_simpli - fied|chinese_traditional|english|french|italian|japanese|korean|spanish] - [--derivationPath ] - -FLAGS - --addressIndex= - Choose the address index for the derivation path - - --changeIndex= - Choose the change index for the derivation path - - --derivationPath= - Choose a different derivation Path (Celo's default is "m/44'/52752'/0'"). Use "eth" - as an alias of the Ethereum derivation path ("m/44'/60'/0'"). Recreating the same - account requires knowledge of the mnemonic, passphrase (if any), and the derivation - path - - --gasCurrency=0x1234567890123456789012345678901234567890 - Use a specific gas currency for transaction fees (defaults to CELO if no gas - currency is supplied). It must be a whitelisted token. - - --globalHelp - View all available global flags - - --language=