Skip to content

Commit f3b81b1

Browse files
authored
Update Readme with EthersSigner (#15)
* update docu * update docu
1 parent 2027288 commit f3b81b1

File tree

1 file changed

+139
-7
lines changed

1 file changed

+139
-7
lines changed

README.md

Lines changed: 139 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -52,11 +52,6 @@ interface EthersModuleOptions {
5252
*/
5353
network?: Network | string;
5454

55-
/**
56-
* Optional parameter to name the module context,
57-
*/
58-
providerName?: string;
59-
6055
/**
6156
* Optional parameter for Alchemy API Token
6257
* @see {@link https://alchemyapi.io}
@@ -115,7 +110,6 @@ import { EthersModule, RINKEBY_NETWORK } from 'nestjs-ethers';
115110
imports: [
116111
EthersModule.forRoot({
117112
network: RINKEBY_NETWORK,
118-
providerName: 'MyModule',
119113
alchemy: '845ce4ed0120d68eb5740c9160f08f98',
120114
etherscan: 'e8cce313c1cfbd085f68be509451f1bab8',
121115
cloudflare: true,
@@ -257,7 +251,145 @@ class ConfigModule {}
257251
class TestModule {}
258252
```
259253

260-
#### Testing a class that uses @InjectEthersProvider
254+
## EthersBaseProvider
255+
256+
`EthersBaseProvider` implements standard [Ether.js Provider](https://docs.ethers.io/v5/api/providers/provider/). So if you are familiar with it, you are ready to go.
257+
258+
```ts
259+
import { InjectEthersProvider, EthersBaseProvider } from 'nestjs-ethers';
260+
261+
@Injectable()
262+
export class TestService {
263+
constructor(
264+
@InjectEthersProvider()
265+
private readonly ethersProvider: EthersBaseProvider,
266+
) {}
267+
async someMethod(): Promise<Network> {
268+
return this.ethersProvider.getNetwork();
269+
}
270+
}
271+
```
272+
273+
## EthersSigner
274+
275+
`EthersSigner` implements methods to create a [WalletSigner](https://docs.ethers.io/v5/api/signer/#Wallet) or [VoidSigner](https://docs.ethers.io/v5/api/signer/#VoidSigner). A `Signer` in ethers is an abstraction of an Ethereum Account, which can be used to sign messages and transactions and send signed transactions to the Ethereum Network. This service will also inject the `EthersBaseProvider` into the wallet.
276+
277+
Create a `Wallet` from a private key:
278+
279+
```ts
280+
import { EthersSigner } from 'nestjs-ethers';
281+
282+
@Injectable()
283+
export class TestService {
284+
constructor(private readonly ethersSigner: EthersSigner) {}
285+
async someMethod(): Promise<string> {
286+
const wallet = this.ethersSigner.createWallet(
287+
'0x4c94faa2c558a998d10ee8b2b9b8eb1fbcb8a6ac5fd085c6f95535604fc1bffb'
288+
);
289+
290+
return wallet.getAddress();
291+
}
292+
}
293+
```
294+
295+
Create a random `Wallet`:
296+
297+
```ts
298+
import { EthersSigner } from 'nestjs-ethers';
299+
300+
@Injectable()
301+
export class TestService {
302+
constructor(private readonly ethersSigner: EthersSigner) {}
303+
async someMethod(): Promise<string> {
304+
const wallet = this.ethersSigner.createRandomWallet();
305+
306+
return wallet.getAddress();
307+
}
308+
}
309+
```
310+
311+
Create a `Wallet` from an encrypted JSON:
312+
313+
```ts
314+
import { EthersSigner } from 'nestjs-ethers';
315+
316+
@Injectable()
317+
export class TestService {
318+
constructor(private readonly ethersSigner: EthersSigner) {}
319+
async someMethod(): Promise<string> {
320+
const wallet = this.ethersSigner.createWalletfromEncryptedJson(
321+
{
322+
address: '012363d61bdc53d0290a0f25e9c89f8257550fb8',
323+
id: '5ba8719b-faf9-49ec-8bca-21522e3d56dc',
324+
version: 3,
325+
Crypto: {
326+
cipher: 'aes-128-ctr',
327+
cipherparams: { iv: 'bc0473d60284d2d6994bb6793e916d06' },
328+
ciphertext:
329+
'e73ed0b0c53bcaea4516a15faba3f6d76dbe71b9b46a460ed7e04a68e0867dd7',
330+
kdf: 'scrypt',
331+
kdfparams: {
332+
salt: '97f0b6e17c392f76a726ceea02bac98f17265f1aa5cf8f9ad1c2b56025bc4714',
333+
n: 131072,
334+
dklen: 32,
335+
p: 1,
336+
r: 8,
337+
},
338+
mac: 'ff4f2db7e7588f8dd41374d7b98dfd7746b554c0099a6c0765be7b1c7913e1f3',
339+
},
340+
'x-ethers': {
341+
client: 'ethers.js',
342+
gethFilename: 'UTC--2018-01-27T01-52-22.0Z--012363d61bdc53d0290a0f25e9c89f8257550fb8',
343+
mnemonicCounter: '70224accc00e35328a010a19fef51121',
344+
mnemonicCiphertext: 'cf835e13e4f90b190052263dbd24b020',
345+
version: '0.1',
346+
},
347+
},
348+
'password'
349+
);
350+
351+
return wallet.getAddress();
352+
}
353+
}
354+
```
355+
356+
Create a `Wallet` from a mnemonic:
357+
358+
```ts
359+
import { EthersSigner } from 'nestjs-ethers';
360+
361+
@Injectable()
362+
export class TestService {
363+
constructor(private readonly ethersSigner: EthersSigner) {}
364+
async someMethod(): Promise<string> {
365+
const wallet = this.ethersSigner.createWalletfromMnemonic(
366+
'service basket parent alcohol fault similar survey twelve hockey cloud walk panel'
367+
);
368+
369+
return wallet.getAddress();
370+
}
371+
}
372+
```
373+
374+
Create a `VoidSigner` from an address:
375+
376+
```ts
377+
import { EthersSigner } from 'nestjs-ethers';
378+
379+
@Injectable()
380+
export class TestService {
381+
constructor(private readonly ethersSigner: EthersSigner) {}
382+
async someMethod(): Promise<string> {
383+
const wallet = this.ethersSigner.createVoidSigner(
384+
'0x012363d61bdc53d0290a0f25e9c89f8257550fb8'
385+
);
386+
387+
return wallet.getAddress();
388+
}
389+
}
390+
```
391+
392+
## Testing a class that uses @InjectEthersProvider
261393

262394
This package exposes a getEthersToken() function that returns a prepared injection token based on the provided context.
263395
Using this token, you can easily provide a mock implementation of the `EthersBaseProvider` using any of the standard custom provider techniques, including useClass, useValue, and useFactory.

0 commit comments

Comments
 (0)