-
Notifications
You must be signed in to change notification settings - Fork 333
/
Copy pathe2e_public_testnet_transfer.test.ts
110 lines (90 loc) · 3.73 KB
/
e2e_public_testnet_transfer.test.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
import { createAccounts } from '@aztec/accounts/testing';
import { type AztecNodeConfig } from '@aztec/aztec-node';
import { type AztecNode, type DebugLogger, Fr, type PXE } from '@aztec/aztec.js';
import { NULL_KEY } from '@aztec/ethereum';
import { EasyPrivateTokenContract } from '@aztec/noir-contracts.js';
import { type ProverNode, type ProverNodeConfig, getProverNodeConfigFromEnv } from '@aztec/prover-node';
import { foundry, sepolia } from 'viem/chains';
import { createAndSyncProverNode } from '../fixtures/snapshot_manager.js';
import { getPrivateKeyFromIndex, setup } from '../fixtures/utils.js';
// process.env.SEQ_PUBLISHER_PRIVATE_KEY = '<PRIVATE_KEY_WITH_SEPOLIA_ETH>';
// process.env.PROVER_PUBLISHER_PRIVATE_KEY = '<PRIVATE_KEY_WITH_SEPOLIA_ETH>';
// process.env.ETHEREUM_HOST= 'https://sepolia.infura.io/v3/<API_KEY>';
// process.env.L1_CHAIN_ID = '11155111';
describe(`deploys and transfers a private only token`, () => {
let secretKey1: Fr;
let secretKey2: Fr;
let proverConfig: ProverNodeConfig;
let config: AztecNodeConfig;
let aztecNode: AztecNode;
let proverNode: ProverNode;
let pxe: PXE;
let logger: DebugLogger;
let teardown: () => Promise<void>;
beforeEach(async () => {
const chainId = !process.env.L1_CHAIN_ID ? foundry.id : +process.env.L1_CHAIN_ID;
const chain = chainId == sepolia.id ? sepolia : foundry; // Not the best way of doing this.
({ logger, pxe, teardown, config, aztecNode } = await setup(
0,
{ skipProtocolContracts: true, stateLoad: undefined },
{},
false,
chain,
));
proverConfig = getProverNodeConfigFromEnv();
const proverNodePrivateKey = getPrivateKeyFromIndex(2);
proverConfig.publisherPrivateKey =
proverConfig.publisherPrivateKey === NULL_KEY
? `0x${proverNodePrivateKey?.toString('hex')}`
: proverConfig.publisherPrivateKey;
proverNode = await createAndSyncProverNode(proverConfig.publisherPrivateKey, config, aztecNode);
}, 600_000);
afterEach(async () => {
await proverNode.stop();
await teardown();
});
it('calls a private function', async () => {
const initialBalance = 100_000_000_000n;
const transferValue = 5n;
secretKey1 = Fr.random();
secretKey2 = Fr.random();
logger.info(`Deploying accounts.`);
const accounts = await createAccounts(pxe, 2, [secretKey1, secretKey2], {
interval: 0.1,
proven: true,
provenTimeout: 600,
timeout: 300,
});
logger.info(`Accounts deployed, deploying token.`);
const [deployerWallet, recipientWallet] = accounts;
const token = await EasyPrivateTokenContract.deploy(
deployerWallet,
initialBalance,
deployerWallet.getAddress(),
deployerWallet.getAddress(),
)
.send({
universalDeploy: true,
skipPublicDeployment: true,
skipClassRegistration: true,
skipInitialization: false,
skipPublicSimulation: true,
})
.deployed({
proven: true,
provenTimeout: 600,
timeout: 300,
});
logger.info(`Performing transfer.`);
await token.methods
.transfer(transferValue, deployerWallet.getAddress(), recipientWallet.getAddress(), deployerWallet.getAddress())
.send()
.wait({ proven: true, provenTimeout: 600, timeout: 300 });
logger.info(`Transfer completed`);
const balanceDeployer = await token.methods.get_balance(deployerWallet.getAddress()).simulate();
const balanceRecipient = await token.methods.get_balance(recipientWallet.getAddress()).simulate();
logger.info(`Deployer balance: ${balanceDeployer}, Recipient balance: ${balanceRecipient}`);
expect(balanceDeployer).toBe(initialBalance - transferValue);
expect(balanceRecipient).toBe(transferValue);
}, 600_000);
});