Newer
Older
/* eslint-disable @typescript-eslint/no-unsafe-call */
import { GenericCall } from '@polkadot/types/generic';
import { createCall, kusamaRegistry } from '../../utils/testTools';
import { BlocksService } from './BlocksService';
const transfer = createCall('balances', 'transfer', {
value: 12,
dest: kusamaRegistry.createType(
'AccountId',
'14E5nqKAp3oAJcmzgZhUD2RcptBeUBScxKHgJKU4HPNcKVf3'
), // Bob
});
const transferOutput = {
method: 'balances.transfer',
callIndex: new Uint8Array([6, 0]),
args: {
dest: '5FHneW46xGXgs5mUiveU4sbTyGBzmstUspZC92UhjJM694ty',
value: 12,
},
};
describe('BlocksService.parseGenericCall', () => {
it('does not handle an empty object', () =>
expect(() =>
BlocksService['parseGenericCall'](({} as unknown) as GenericCall)
).toThrow());
it('parses a simple balances.transfer', () => {
expect(
JSON.stringify(BlocksService['parseGenericCall'](transfer))
).toBe(JSON.stringify(transferOutput));
});
it('parses utility.batch nested 4 deep', () => {
const batch1 = createCall('utility', 'batch', {
calls: [transfer],
});
const batch2 = createCall('utility', 'batch', {
calls: [batch1, transfer],
});
const batch3 = createCall('utility', 'batch', {
calls: [batch2, transfer],
});
const batch4 = createCall('utility', 'batch', {
calls: [batch3, transfer],
});
const baseBatch = {
method: 'utility.batch',
callIndex: new Uint8Array([1, 0]),
args: {
calls: [],
},
};
expect(JSON.stringify(BlocksService['parseGenericCall'](batch4))).toBe(
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
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
JSON.stringify({
...baseBatch,
args: {
calls: [
{
...baseBatch,
args: {
calls: [
{
...baseBatch,
args: {
calls: [
{
...baseBatch,
args: {
calls: [transferOutput],
},
},
transferOutput,
],
},
},
transferOutput,
],
},
},
transferOutput,
],
},
})
);
});
it('handles a batch sudo proxy transfer', () => {
const proxy = createCall('proxy', 'proxy', {
forceProxyType: 'Any',
call: transfer,
});
const sudo = createCall('sudo', 'sudo', {
call: proxy,
});
const batch = createCall('utility', 'batch', {
calls: [sudo, sudo, sudo],
});
const sudoOutput = {
method: 'sudo.sudo',
callIndex: new Uint8Array([18, 0]),
args: {
call: {
method: 'proxy.proxy',
callIndex: new Uint8Array([28, 0]),
args: {
real:
'5C4hrfjw9DjXZTzV3MwzrrAr9P1MJhSrvWGWqi1eSuyUpnhM',
force_proxy_type: 'Any',
call: transferOutput,
},
},
},
};
expect(
JSON.stringify(BlocksService['parseGenericCall'](batch))
).toEqual(