Skip to content

Commit 1bc6cd0

Browse files
authoredJul 29, 2022
πŸ‘©πŸ»β€πŸ³ MockProvider: Use actual wallets from ganache in getWallets (#770)
1 parent 1fe07bb commit 1bc6cd0

File tree

4 files changed

+89
-19
lines changed

4 files changed

+89
-19
lines changed
 

β€Ž.changeset/small-feet-beam.md

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@ethereum-waffle/provider": patch
3+
---
4+
5+
πŸ‘©πŸ»β€πŸ³ MockProvider: Use actual wallets from ganache in `getWallets`

β€Žwaffle-provider/src/MockProvider.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import {providers, Wallet} from 'ethers';
22
import {CallHistory, RecordedCall} from './CallHistory';
33
import {defaultAccounts} from './defaultAccounts';
4-
import type {Provider} from 'ganache';
4+
import type {EthereumProvider, Provider} from 'ganache';
55
import type {EthereumProviderOptions} from '@ganache/ethereum-options';
66

77
import {deployENS, ENS} from '@ethereum-waffle/ens';
@@ -54,8 +54,8 @@ export class MockProvider extends providers.Web3Provider {
5454
}
5555

5656
getWallets() {
57-
const items = this.options?.ganacheOptions.wallet?.accounts ?? defaultAccounts;
58-
return items.map((x: any) => new Wallet(x.secretKey, this));
57+
const accounts = (this.provider as unknown as EthereumProvider).getInitialAccounts();
58+
return Object.values(accounts).map((x: any) => new Wallet(x.secretKey, this));
5959
}
6060

6161
createEmptyWallet() {

β€Žwaffle-provider/test/MockProvider.test.ts

+1-16
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import {expect} from 'chai';
2-
import {BigNumber, constants, utils, Wallet} from 'ethers';
3-
import {MockProvider} from '../src/MockProvider';
2+
import {BigNumber, constants, utils} from 'ethers';
43
import {deployToken} from './BasicToken';
54
import {describeMockProviderCases} from './MockProviderCases';
65

@@ -15,20 +14,6 @@ describeMockProviderCases('INTEGRATION: MockProvider', (provider) => {
1514
}
1615
});
1716

18-
it('accepts options', () => {
19-
const original = Wallet.createRandom();
20-
const provider = new MockProvider({
21-
ganacheOptions: {
22-
wallet: {
23-
accounts: [{balance: '0x64', secretKey: original.privateKey}]
24-
}
25-
}
26-
});
27-
const wallets = provider.getWallets();
28-
expect(wallets.length).to.equal(1);
29-
expect(wallets[0].address).to.equal(original.address);
30-
});
31-
3217
it('can send simple transactions', async () => {
3318
const [sender] = provider.getWallets();
3419
const recipient = provider.createEmptyWallet();
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
import {expect} from 'chai';
2+
import {utils, Wallet} from 'ethers';
3+
import {MockProvider} from '../src/MockProvider';
4+
5+
describe('MockProvider - Ganache Wallets', async () => {
6+
const assertWalletsWithBalances = async (provider: MockProvider, wallets: Wallet[]) => {
7+
for (const wallet of wallets) {
8+
const balance = await wallet.getBalance();
9+
expect(balance.gt(0)).to.equal(true);
10+
expect(wallet.provider).to.equal(provider);
11+
}
12+
};
13+
14+
it('returns default wallets', async () => {
15+
const provider = new MockProvider();
16+
const wallets = provider.getWallets();
17+
expect(wallets.length).to.equal(10);
18+
await assertWalletsWithBalances(provider, wallets);
19+
});
20+
21+
it('accepts override of accounts', () => {
22+
const original = Wallet.createRandom();
23+
const provider = new MockProvider({
24+
ganacheOptions: {
25+
wallet: {
26+
accounts: [{balance: '0x64', secretKey: original.privateKey}]
27+
}
28+
}
29+
});
30+
const wallets = provider.getWallets();
31+
expect(wallets.length).to.equal(1);
32+
expect(wallets[0].address).to.equal(original.address);
33+
});
34+
35+
it('Can generate a different number of accounts', async () => {
36+
const provider = new MockProvider({
37+
ganacheOptions: {
38+
wallet: {
39+
totalAccounts: 25
40+
}
41+
}
42+
});
43+
const wallets = provider.getWallets();
44+
expect(wallets.length).to.equal(25);
45+
await assertWalletsWithBalances(provider, wallets);
46+
});
47+
48+
it('Can generate accounts based on a seed', async () => {
49+
const mnemonic = Wallet.createRandom().mnemonic;
50+
const provider = new MockProvider({
51+
ganacheOptions: {
52+
wallet: {
53+
totalAccounts: 25,
54+
mnemonic: mnemonic.phrase
55+
}
56+
}
57+
});
58+
const wallets = provider.getWallets();
59+
expect(wallets.length).to.equal(25);
60+
await assertWalletsWithBalances(provider, wallets);
61+
62+
const defaultProvider = new MockProvider();
63+
expect(defaultProvider.getWallets()[0].address).to.not.be.eq(wallets[0].address);
64+
});
65+
66+
it('Can generate wallets with non-default balance', async () => {
67+
const provider = new MockProvider({
68+
ganacheOptions: {
69+
wallet: {
70+
totalAccounts: 25,
71+
defaultBalance: 101
72+
}
73+
}
74+
});
75+
const wallets = provider.getWallets();
76+
expect(wallets.length).to.equal(25);
77+
await assertWalletsWithBalances(provider, wallets);
78+
expect((await wallets[0].getBalance()).toString()).to.eq(utils.parseEther('101').toString());
79+
});
80+
});

0 commit comments

Comments
 (0)
Please sign in to comment.