@cardano-sdk/e2e 0.17.1 → 0.18.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +16 -0
- package/dist/cjs/tsconfig.tsbuildinfo +1 -1
- package/dist/esm/tsconfig.tsbuildinfo +1 -1
- package/local-network/scripts/pools/update-node-utils.sh +15 -15
- package/package.json +20 -20
- package/test/long-running/delegation-rewards.test.ts +104 -58
- package/test/web-extension/extension/background/cip30.ts +5 -1
- package/test/web-extension/specs/wallet.spec.ts +2 -2
|
@@ -67,22 +67,22 @@ updatePool()
|
|
|
67
67
|
coldKey=network-files/pools/cold"${SP_NODE_ID}".skey
|
|
68
68
|
vrfKey=network-files/pools/vrf"${SP_NODE_ID}".vkey
|
|
69
69
|
delegatorPaymentKey=network-files/stake-delegator-keys/payment"${SP_NODE_ID}".vkey
|
|
70
|
-
|
|
70
|
+
delegatorStakeKey=network-files/stake-delegator-keys/staking"${SP_NODE_ID}".vkey
|
|
71
71
|
delegatorPaymentSKey=network-files/stake-delegator-keys/payment"${SP_NODE_ID}".skey
|
|
72
|
-
|
|
72
|
+
delegatorStakeSKey=network-files/stake-delegator-keys/staking"${SP_NODE_ID}".skey
|
|
73
73
|
|
|
74
74
|
POOL_ID=$(cardano-cli stake-pool id --cold-verification-key-file "$coldVKey" --output-format "hex")
|
|
75
75
|
|
|
76
76
|
# funding pool owner stake address
|
|
77
|
-
|
|
78
|
-
currentBalance=$(getAddressBalance "$
|
|
77
|
+
stakeAddr=$(cardano-cli address build --payment-verification-key-file "$genesisVKey" --stake-verification-key-file "$stakeVKey" --testnet-magic 888)
|
|
78
|
+
currentBalance=$(getAddressBalance "$stakeAddr")
|
|
79
79
|
utxo=$(cardano-cli query utxo --address "$genesisAddr" --testnet-magic 888 | awk 'NR == 3 {printf("%s#%s", $1, $2)}')
|
|
80
80
|
|
|
81
81
|
cardano-cli transaction build \
|
|
82
82
|
--babbage-era \
|
|
83
83
|
--change-address "$genesisAddr" \
|
|
84
84
|
--tx-in "$utxo" \
|
|
85
|
-
--tx-out "$
|
|
85
|
+
--tx-out "$stakeAddr"+"$POOL_OWNER_STAKE" \
|
|
86
86
|
--testnet-magic 888 \
|
|
87
87
|
--out-file wallets-tx.raw 2>&1
|
|
88
88
|
|
|
@@ -94,11 +94,11 @@ updatePool()
|
|
|
94
94
|
|
|
95
95
|
cardano-cli transaction submit --testnet-magic 888 --tx-file wallets-tx.signed 2>&1
|
|
96
96
|
|
|
97
|
-
updatedBalance=$(getAddressBalance "$
|
|
97
|
+
updatedBalance=$(getAddressBalance "$stakeAddr")
|
|
98
98
|
|
|
99
99
|
while [ "$currentBalance" -eq "$updatedBalance" ]
|
|
100
100
|
do
|
|
101
|
-
updatedBalance=$(getAddressBalance "$
|
|
101
|
+
updatedBalance=$(getAddressBalance "$stakeAddr")
|
|
102
102
|
sleep 1
|
|
103
103
|
done
|
|
104
104
|
|
|
@@ -216,12 +216,12 @@ updatePool()
|
|
|
216
216
|
# register delegator stake address
|
|
217
217
|
echo "Registering delegator stake certificate ${SP_NODE_ID}..."
|
|
218
218
|
|
|
219
|
-
paymentAddr=$(cardano-cli address build --payment-verification-key-file "$delegatorPaymentKey" --stake-verification-key-file "$
|
|
219
|
+
paymentAddr=$(cardano-cli address build --payment-verification-key-file "$delegatorPaymentKey" --stake-verification-key-file "$delegatorStakeKey" --testnet-magic 888)
|
|
220
220
|
currentBalance=$(getAddressBalance "$paymentAddr")
|
|
221
221
|
|
|
222
222
|
# create pool delegation certificate
|
|
223
223
|
cardano-cli stake-address delegation-certificate \
|
|
224
|
-
--stake-verification-key-file "$
|
|
224
|
+
--stake-verification-key-file "$delegatorStakeKey" \
|
|
225
225
|
--stake-pool-id "$POOL_ID" \
|
|
226
226
|
--out-file deleg.cert
|
|
227
227
|
|
|
@@ -258,7 +258,7 @@ updatePool()
|
|
|
258
258
|
cardano-cli transaction sign \
|
|
259
259
|
--tx-body-file tx.raw \
|
|
260
260
|
--signing-key-file "$delegatorPaymentSKey" \
|
|
261
|
-
--signing-key-file "$
|
|
261
|
+
--signing-key-file "$delegatorStakeSKey" \
|
|
262
262
|
--testnet-magic 888 \
|
|
263
263
|
--out-file tx.signed
|
|
264
264
|
|
|
@@ -384,21 +384,21 @@ deregisterPool()
|
|
|
384
384
|
coldVKey=network-files/pools/cold"${SP_NODE_ID}".vkey
|
|
385
385
|
coldKey=network-files/pools/cold"${SP_NODE_ID}".skey
|
|
386
386
|
delegatorPaymentKey=network-files/stake-delegator-keys/payment"${SP_NODE_ID}".vkey
|
|
387
|
-
|
|
387
|
+
delegatorStakeKey=network-files/stake-delegator-keys/staking"${SP_NODE_ID}".vkey
|
|
388
388
|
delegatorPaymentSKey=network-files/stake-delegator-keys/payment"${SP_NODE_ID}".skey
|
|
389
|
-
|
|
389
|
+
delegatorStakeSKey=network-files/stake-delegator-keys/staking"${SP_NODE_ID}".skey
|
|
390
390
|
|
|
391
391
|
# We are going to redelegate this stake to dbSync can index it properly.
|
|
392
392
|
echo "Registering delegator stake certificate ${SP_NODE_ID}..."
|
|
393
393
|
|
|
394
|
-
paymentAddr=$(cardano-cli address build --payment-verification-key-file "$delegatorPaymentKey" --stake-verification-key-file "$
|
|
394
|
+
paymentAddr=$(cardano-cli address build --payment-verification-key-file "$delegatorPaymentKey" --stake-verification-key-file "$delegatorStakeKey" --testnet-magic 888)
|
|
395
395
|
currentBalance=$(getAddressBalance "$paymentAddr")
|
|
396
396
|
|
|
397
397
|
POOL_ID=$(cardano-cli stake-pool id --cold-verification-key-file "$coldVKey" --output-format "hex")
|
|
398
398
|
|
|
399
399
|
# create pool delegation certificate
|
|
400
400
|
cardano-cli stake-address delegation-certificate \
|
|
401
|
-
--stake-verification-key-file "$
|
|
401
|
+
--stake-verification-key-file "$delegatorStakeKey" \
|
|
402
402
|
--stake-pool-id "$POOL_ID" \
|
|
403
403
|
--out-file deleg.cert
|
|
404
404
|
|
|
@@ -435,7 +435,7 @@ deregisterPool()
|
|
|
435
435
|
cardano-cli transaction sign \
|
|
436
436
|
--tx-body-file tx.raw \
|
|
437
437
|
--signing-key-file "$delegatorPaymentSKey" \
|
|
438
|
-
--signing-key-file "$
|
|
438
|
+
--signing-key-file "$delegatorStakeSKey" \
|
|
439
439
|
--testnet-magic 888 \
|
|
440
440
|
--out-file tx.signed
|
|
441
441
|
|
package/package.json
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cardano-sdk/e2e",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.18.0",
|
|
4
4
|
"description": "End to end tests for the cardano-js-sdk packages.",
|
|
5
5
|
"engines": {
|
|
6
|
-
"node": ">=16.
|
|
6
|
+
"node": ">=16.20.1"
|
|
7
7
|
},
|
|
8
8
|
"main": "dist/cjs/index.js",
|
|
9
9
|
"module": "dist/esm/index.js",
|
|
@@ -81,19 +81,19 @@
|
|
|
81
81
|
"dependencies": {
|
|
82
82
|
"@cardano-foundation/ledgerjs-hw-app-cardano": "^6.0.0",
|
|
83
83
|
"@cardano-ogmios/client": "5.6.0",
|
|
84
|
-
"@cardano-sdk/cardano-services": "~0.
|
|
85
|
-
"@cardano-sdk/cardano-services-client": "~0.
|
|
86
|
-
"@cardano-sdk/core": "~0.
|
|
87
|
-
"@cardano-sdk/crypto": "~0.1.
|
|
88
|
-
"@cardano-sdk/hardware-ledger": "~0.
|
|
89
|
-
"@cardano-sdk/input-selection": "~0.11.
|
|
90
|
-
"@cardano-sdk/key-management": "~0.
|
|
91
|
-
"@cardano-sdk/ogmios": "~0.12.
|
|
92
|
-
"@cardano-sdk/tx-construction": "~0.
|
|
93
|
-
"@cardano-sdk/util": "~0.13.
|
|
94
|
-
"@cardano-sdk/util-dev": "~0.
|
|
95
|
-
"@cardano-sdk/util-rxjs": "~0.5.
|
|
96
|
-
"@cardano-sdk/wallet": "~0.
|
|
84
|
+
"@cardano-sdk/cardano-services": "~0.15.0",
|
|
85
|
+
"@cardano-sdk/cardano-services-client": "~0.11.0",
|
|
86
|
+
"@cardano-sdk/core": "~0.16.0",
|
|
87
|
+
"@cardano-sdk/crypto": "~0.1.10",
|
|
88
|
+
"@cardano-sdk/hardware-ledger": "~0.3.0",
|
|
89
|
+
"@cardano-sdk/input-selection": "~0.11.5",
|
|
90
|
+
"@cardano-sdk/key-management": "~0.9.0",
|
|
91
|
+
"@cardano-sdk/ogmios": "~0.12.14",
|
|
92
|
+
"@cardano-sdk/tx-construction": "~0.10.0",
|
|
93
|
+
"@cardano-sdk/util": "~0.13.1",
|
|
94
|
+
"@cardano-sdk/util-dev": "~0.14.0",
|
|
95
|
+
"@cardano-sdk/util-rxjs": "~0.5.6",
|
|
96
|
+
"@cardano-sdk/wallet": "~0.19.0",
|
|
97
97
|
"@vespaiach/axios-fetch-adapter": "^0.3.0",
|
|
98
98
|
"axios": "^0.27.2",
|
|
99
99
|
"bunyan": "^1.8.15",
|
|
@@ -122,10 +122,10 @@
|
|
|
122
122
|
"@babel/core": "^7.18.2",
|
|
123
123
|
"@babel/preset-env": "^7.18.2",
|
|
124
124
|
"@babel/preset-typescript": "^7.17.12",
|
|
125
|
-
"@cardano-sdk/dapp-connector": "~0.9.
|
|
126
|
-
"@cardano-sdk/projection": "~0.
|
|
127
|
-
"@cardano-sdk/projection-typeorm": "~0.
|
|
128
|
-
"@cardano-sdk/web-extension": "~0.14.
|
|
125
|
+
"@cardano-sdk/dapp-connector": "~0.9.12",
|
|
126
|
+
"@cardano-sdk/projection": "~0.7.0",
|
|
127
|
+
"@cardano-sdk/projection-typeorm": "~0.4.0",
|
|
128
|
+
"@cardano-sdk/web-extension": "~0.14.2",
|
|
129
129
|
"@dcspark/cardano-multiplatform-lib-browser": "^3.1.1",
|
|
130
130
|
"@emurgo/cardano-message-signing-asmjs": "^1.0.1",
|
|
131
131
|
"@types/bunyan": "^1.8.8",
|
|
@@ -177,5 +177,5 @@
|
|
|
177
177
|
"webpack-cli": "^4.9.2",
|
|
178
178
|
"webpack-merge": "^5.8.0"
|
|
179
179
|
},
|
|
180
|
-
"gitHead": "
|
|
180
|
+
"gitHead": "4308af6772b6761b0bcafa7d2c689cd9847a0bed"
|
|
181
181
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Cardano } from '@cardano-sdk/core';
|
|
1
|
+
import { Cardano, StakePoolProvider } from '@cardano-sdk/core';
|
|
2
2
|
import { PersonalWallet } from '@cardano-sdk/wallet';
|
|
3
3
|
import {
|
|
4
4
|
TestWallet,
|
|
@@ -16,6 +16,64 @@ import { waitForWalletStateSettle } from '../../../wallet/test/util';
|
|
|
16
16
|
|
|
17
17
|
const env = getEnv(walletVariables);
|
|
18
18
|
|
|
19
|
+
const submitDelegationTx = async (wallet: PersonalWallet, pools: Cardano.PoolId[]) => {
|
|
20
|
+
logger.info(`Creating delegation tx at epoch #${(await firstValueFrom(wallet.currentEpoch$)).epochNo}`);
|
|
21
|
+
const { tx: signedTx } = await wallet
|
|
22
|
+
.createTxBuilder()
|
|
23
|
+
.delegatePortfolio({
|
|
24
|
+
pools: pools.map((poolId) => ({ id: Cardano.PoolIdHex(Cardano.PoolId.toKeyHash(poolId)), weight: 1 }))
|
|
25
|
+
})
|
|
26
|
+
.build()
|
|
27
|
+
.sign();
|
|
28
|
+
await wallet.submitTx(signedTx);
|
|
29
|
+
const { epochNo } = await firstValueFrom(wallet.currentEpoch$);
|
|
30
|
+
logger.info(`Delegation tx ${signedTx.id} submitted at epoch #${epochNo}`);
|
|
31
|
+
|
|
32
|
+
return signedTx;
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
const generateTxs = async (sendingWallet: PersonalWallet, receivingWallet: PersonalWallet) => {
|
|
36
|
+
logger.info('Sending 100 txs to generate reward fees');
|
|
37
|
+
|
|
38
|
+
const tAdaToSend = 5_000_000n;
|
|
39
|
+
const [{ address: receivingAddress }] = await firstValueFrom(receivingWallet.addresses$);
|
|
40
|
+
|
|
41
|
+
for (let i = 0; i < 100; i++) {
|
|
42
|
+
const txBuilder = sendingWallet.createTxBuilder();
|
|
43
|
+
const txOut = await txBuilder.buildOutput().address(receivingAddress).coin(tAdaToSend).build();
|
|
44
|
+
const { tx: signedTx } = await txBuilder.addOutput(txOut).build().sign();
|
|
45
|
+
await sendingWallet.submitTx(signedTx);
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
const buildSpendRewardTx = async (sendingWallet: PersonalWallet, receivingWallet: PersonalWallet) => {
|
|
50
|
+
const tAdaToSend = 5_000_000n;
|
|
51
|
+
const [{ address: receivingAddress }] = await firstValueFrom(receivingWallet.addresses$);
|
|
52
|
+
const txBuilder = sendingWallet.createTxBuilder();
|
|
53
|
+
const txOut = await txBuilder.buildOutput().address(receivingAddress).coin(tAdaToSend).build();
|
|
54
|
+
const tx = txBuilder.addOutput(txOut).build();
|
|
55
|
+
const { body } = await tx.inspect();
|
|
56
|
+
logger.debug('Body of tx before sign');
|
|
57
|
+
logger.debug(body);
|
|
58
|
+
const { tx: signedTx } = await tx.sign();
|
|
59
|
+
logger.debug('Body of tx after sign');
|
|
60
|
+
logger.debug(signedTx.body);
|
|
61
|
+
|
|
62
|
+
return signedTx;
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
const getPoolIds = async (stakePoolProvider: StakePoolProvider, count: number) => {
|
|
66
|
+
const activePools = await stakePoolProvider.queryStakePools({
|
|
67
|
+
filters: { pledgeMet: true, status: [Cardano.StakePoolStatus.Active] },
|
|
68
|
+
pagination: { limit: count, startAt: 0 }
|
|
69
|
+
});
|
|
70
|
+
expect(activePools.totalResultCount).toBeGreaterThanOrEqual(count);
|
|
71
|
+
const poolIds = activePools.pageResults.map(({ id }) => id);
|
|
72
|
+
expect(poolIds.every((poolId) => poolId !== undefined)).toBeTruthy();
|
|
73
|
+
logger.info('Wallet funds will be staked to pools:', poolIds);
|
|
74
|
+
return poolIds;
|
|
75
|
+
};
|
|
76
|
+
|
|
19
77
|
describe('delegation rewards', () => {
|
|
20
78
|
let providers: TestWallet['providers'];
|
|
21
79
|
let wallet1: PersonalWallet;
|
|
@@ -51,64 +109,11 @@ describe('delegation rewards', () => {
|
|
|
51
109
|
await initializeWallets();
|
|
52
110
|
|
|
53
111
|
// Arrange
|
|
54
|
-
const
|
|
55
|
-
filters: { pledgeMet: true, status: [Cardano.StakePoolStatus.Active] },
|
|
56
|
-
pagination: { limit: 1, startAt: 0 }
|
|
57
|
-
});
|
|
58
|
-
expect(activePools.totalResultCount).toBeGreaterThan(0);
|
|
59
|
-
const poolId = activePools.pageResults[0].id;
|
|
60
|
-
expect(poolId).toBeDefined();
|
|
61
|
-
logger.info(`Wallet funds will be staked to pool ${poolId}.`);
|
|
62
|
-
|
|
63
|
-
const submitDelegationTx = async () => {
|
|
64
|
-
logger.info(`Creating delegation tx at epoch #${(await firstValueFrom(wallet1.currentEpoch$)).epochNo}`);
|
|
65
|
-
const { tx: signedTx } = await wallet1
|
|
66
|
-
.createTxBuilder()
|
|
67
|
-
.delegatePortfolio({
|
|
68
|
-
pools: [{ id: Cardano.PoolIdHex(Cardano.PoolId.toKeyHash(poolId)), weight: 1 }]
|
|
69
|
-
})
|
|
70
|
-
.build()
|
|
71
|
-
.sign();
|
|
72
|
-
await wallet1.submitTx(signedTx);
|
|
73
|
-
const { epochNo } = await firstValueFrom(wallet1.currentEpoch$);
|
|
74
|
-
logger.info(`Delegation tx ${signedTx.id} submitted at epoch #${epochNo}`);
|
|
75
|
-
|
|
76
|
-
return signedTx;
|
|
77
|
-
};
|
|
78
|
-
|
|
79
|
-
const generateTxs = async () => {
|
|
80
|
-
logger.info('Sending 100 txs to generate reward fees');
|
|
81
|
-
|
|
82
|
-
const tAdaToSend = 5_000_000n;
|
|
83
|
-
const [{ address: receivingAddress }] = await firstValueFrom(wallet2.addresses$);
|
|
84
|
-
|
|
85
|
-
for (let i = 0; i < 100; i++) {
|
|
86
|
-
const txBuilder = wallet1.createTxBuilder();
|
|
87
|
-
const txOut = await txBuilder.buildOutput().address(receivingAddress).coin(tAdaToSend).build();
|
|
88
|
-
const { tx: signedTx } = await txBuilder.addOutput(txOut).build().sign();
|
|
89
|
-
await wallet1.submitTx(signedTx);
|
|
90
|
-
}
|
|
91
|
-
};
|
|
92
|
-
|
|
93
|
-
const buildSpendRewardTx = async () => {
|
|
94
|
-
const tAdaToSend = 5_000_000n;
|
|
95
|
-
const [{ address: receivingAddress }] = await firstValueFrom(wallet2.addresses$);
|
|
96
|
-
const txBuilder = wallet1.createTxBuilder();
|
|
97
|
-
const txOut = await txBuilder.buildOutput().address(receivingAddress).coin(tAdaToSend).build();
|
|
98
|
-
const tx = await txBuilder.addOutput(txOut).build();
|
|
99
|
-
const { body } = await tx.inspect();
|
|
100
|
-
logger.debug('Body of tx before sign');
|
|
101
|
-
logger.debug(body);
|
|
102
|
-
const { tx: signedTx } = await tx.sign();
|
|
103
|
-
logger.debug('Body of tx after sign');
|
|
104
|
-
logger.debug(signedTx.body);
|
|
105
|
-
|
|
106
|
-
return signedTx;
|
|
107
|
-
};
|
|
112
|
+
const [poolId] = await getPoolIds(providers.stakePoolProvider, 1);
|
|
108
113
|
|
|
109
114
|
// Stake and wait for reward
|
|
110
115
|
|
|
111
|
-
const signedTx = await submitDelegationTx();
|
|
116
|
+
const signedTx = await submitDelegationTx(wallet1, [poolId]);
|
|
112
117
|
|
|
113
118
|
const delegationTxConfirmedAtEpoch = await getTxConfirmationEpoch(wallet1, signedTx);
|
|
114
119
|
|
|
@@ -116,7 +121,7 @@ describe('delegation rewards', () => {
|
|
|
116
121
|
|
|
117
122
|
await waitForEpoch(wallet1, delegationTxConfirmedAtEpoch + 2);
|
|
118
123
|
|
|
119
|
-
await generateTxs();
|
|
124
|
+
await generateTxs(wallet1, wallet2);
|
|
120
125
|
await waitForEpoch(wallet1, delegationTxConfirmedAtEpoch + 4);
|
|
121
126
|
|
|
122
127
|
// Check reward
|
|
@@ -127,8 +132,49 @@ describe('delegation rewards', () => {
|
|
|
127
132
|
logger.info(`Generated rewards: ${rewards} tLovelace`);
|
|
128
133
|
|
|
129
134
|
// Spend reward
|
|
130
|
-
const spendRewardTx = await buildSpendRewardTx();
|
|
135
|
+
const spendRewardTx = await buildSpendRewardTx(wallet1, wallet2);
|
|
131
136
|
expect(spendRewardTx.body.withdrawals?.length).toBeGreaterThan(0);
|
|
132
137
|
await submitAndConfirm(wallet1, spendRewardTx);
|
|
133
138
|
});
|
|
139
|
+
|
|
140
|
+
it('can spend rewards from multiple accounts', async () => {
|
|
141
|
+
if (!(await runningAgainstLocalNetwork())) {
|
|
142
|
+
return logger.fatal(
|
|
143
|
+
"Skipping test 'will receive rewards for delegated tADA' as it should only run with a fast test network"
|
|
144
|
+
);
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
// This has to be done inside the test (instead of beforeAll)
|
|
148
|
+
// so that it doesn't fail when running against non-local networks
|
|
149
|
+
await initializeWallets();
|
|
150
|
+
|
|
151
|
+
const [poolId1, poolId2] = await getPoolIds(providers.stakePoolProvider, 2);
|
|
152
|
+
const signedTx = await submitDelegationTx(wallet1, [poolId1, poolId2]);
|
|
153
|
+
|
|
154
|
+
const delegationTxConfirmedAtEpoch = await getTxConfirmationEpoch(wallet1, signedTx);
|
|
155
|
+
|
|
156
|
+
logger.info(`Delegation tx confirmed at epoch #${delegationTxConfirmedAtEpoch}`);
|
|
157
|
+
|
|
158
|
+
await waitForEpoch(wallet1, delegationTxConfirmedAtEpoch + 2);
|
|
159
|
+
|
|
160
|
+
await generateTxs(wallet1, wallet2);
|
|
161
|
+
await waitForEpoch(wallet1, delegationTxConfirmedAtEpoch + 4);
|
|
162
|
+
|
|
163
|
+
// Check reward
|
|
164
|
+
await waitForWalletStateSettle(wallet1);
|
|
165
|
+
const rewardsPerAcct = await firstValueFrom(wallet1.delegation.rewardAccounts$);
|
|
166
|
+
const rewards = await firstValueFrom(wallet1.balance.rewardAccounts.rewards$);
|
|
167
|
+
|
|
168
|
+
logger.info(`Generated rewards: ${rewards} tLovelace`);
|
|
169
|
+
logger.info('Generated rewards per account:', rewardsPerAcct);
|
|
170
|
+
|
|
171
|
+
expect(rewards).toBeGreaterThan(0n);
|
|
172
|
+
|
|
173
|
+
// Spend reward
|
|
174
|
+
const spendRewardTx = await buildSpendRewardTx(wallet1, wallet2);
|
|
175
|
+
logger.info('transaction Withdrawals', spendRewardTx.body.withdrawals);
|
|
176
|
+
|
|
177
|
+
expect(spendRewardTx.body.withdrawals?.length).toBeGreaterThanOrEqual(2);
|
|
178
|
+
await submitAndConfirm(wallet1, spendRewardTx);
|
|
179
|
+
});
|
|
134
180
|
});
|
|
@@ -8,7 +8,11 @@ import { wallet$ } from './walletManager';
|
|
|
8
8
|
import { walletName } from '../const';
|
|
9
9
|
|
|
10
10
|
// this should come from remote api
|
|
11
|
-
const confirmationCallback: walletCip30.CallbackConfirmation =
|
|
11
|
+
const confirmationCallback: walletCip30.CallbackConfirmation = {
|
|
12
|
+
signData: async () => true,
|
|
13
|
+
signTx: async () => true,
|
|
14
|
+
submitTx: async () => true
|
|
15
|
+
};
|
|
12
16
|
|
|
13
17
|
const walletApi = walletCip30.createWalletApi(wallet$, confirmationCallback, { logger });
|
|
14
18
|
cip30.initializeBackgroundScript({ walletName }, { authenticator, logger, runtime, walletApi });
|
|
@@ -37,7 +37,7 @@ describe('wallet', () => {
|
|
|
37
37
|
const dappBtnRun = '#bp3-tab-panel_TabsExample_1 > div > button';
|
|
38
38
|
const dappSubmittedTxConfirmation = '#root > div > p:last-child';
|
|
39
39
|
const dappChangeAddress = '#root > div > p:nth-child(11)';
|
|
40
|
-
const
|
|
40
|
+
const dappStakeAddress = '#root > div > p:nth-child(12)';
|
|
41
41
|
const dappUsedAddress = '#root > div > p:nth-child(13)';
|
|
42
42
|
|
|
43
43
|
const btnDelegate = '#multiDelegation .delegate button';
|
|
@@ -120,7 +120,7 @@ describe('wallet', () => {
|
|
|
120
120
|
|
|
121
121
|
it('dapp gets correct addresses from cip30 wallet api', async () => {
|
|
122
122
|
await expect($(dappChangeAddress)).toHaveTextContaining(walletAddr1);
|
|
123
|
-
await expect($(
|
|
123
|
+
await expect($(dappStakeAddress)).toHaveTextContaining(walletStakeAddr1);
|
|
124
124
|
await expect($(dappUsedAddress)).toHaveTextContaining(walletAddr1);
|
|
125
125
|
});
|
|
126
126
|
});
|