Fix StorageData checks, fix Option toHex 00/01 (#1052)

* Option.toHex should not add 00/01 (implied)

* Option tests

* We have a failing test, finally

* Adapt createType to cater for storage with length
This commit is contained in:
Jaco Greeff
2019-06-22 22:05:36 +02:00
committed by GitHub
parent b5b4ec5737
commit b51761376b
6 changed files with 87 additions and 35 deletions
+48 -27
View File
@@ -19,9 +19,10 @@ const BALANCE_KEYS = [
/* v3-, using xxHash */ '0x4af2c53fce3ec33c6ccccf22e926f1a7',
/* v4+, using blake2_256 */ '0xec8f96437274a883afcac82d01a9defeb68209cd4f2c084632813692aa5e65ad'
];
const OPTION_BYTES_HEX = '0x210100000000000000000000000000000000000000000000000000000000000000000000000000000000011b4d03dd8c01f1049143cf9c4c817e4b167f1d1b83e5c6f0f10d89ba1e7bce';
function formattingTests (version: string, storage: Storage, encodedValues: [string, string]) {
const [ENC_ONE, ENC_TWO] = encodedValues;
function formattingTests (version: string, storage: Storage, encodedValues: [string, string, string]) {
const [ENC_ONE, ENC_TWO, CONTRACT_KEY] = encodedValues;
describe(`formatting with Metadata ${version}`, () => {
let api: Api;
@@ -36,16 +37,25 @@ function formattingTests (version: string, storage: Storage, encodedValues: [str
: null
)
),
subscribe: jest.fn((type, method, params, cb) =>
cb(null, {
block: '0x1234',
changes: [
[ENC_ONE, '0x01020000000000000000000000000000'],
[ENC_TWO, '0x02010000000000000000000000000000']
]
})
)
subscribe: jest.fn((type, method, params, cb) => {
// this emulates https://github.com/polkadot-js/api/issues/1051
params[0][0] === CONTRACT_KEY
? cb(null, {
block: '0x2345',
changes: [
[CONTRACT_KEY, OPTION_BYTES_HEX]
]
})
: cb(null, {
block: '0x1234',
changes: [
[ENC_ONE, '0x01020000000000000000000000000000'],
[ENC_TWO, '0x02010000000000000000000000000000']
]
});
})
};
api = new Api(provider);
});
@@ -94,28 +104,39 @@ function formattingTests (version: string, storage: Storage, encodedValues: [str
value.map((balance: BN) =>
balance.toNumber()
)
).toEqual([513, 258]);
).toEqual([0x0201, 0x0102]);
done();
});
});
it('handles the case where Option<Bytes> are retrieved', (done) => {
api.state
.subscribeStorage([[storage.contract.pristineCode, '0x00']])
.subscribe((value: any) => {
// console.error(value);
// expect(value.toHex()).toBe(OPTION_BYTES_HEX);
done();
});
});
});
}
formattingTests(
'v3',
fromMetadata(new Metadata(rpcMetadataV3)),
['0x4af2c53fce3ec33c6ccccf22e926f1a7', '0x3e62f7ed6e788e1337bce2a97b68a12a']
);
formattingTests('v3', fromMetadata(new Metadata(rpcMetadataV3)), [
'0x4af2c53fce3ec33c6ccccf22e926f1a7',
'0x3e62f7ed6e788e1337bce2a97b68a12a',
'0x777519cd81f845abdb40d253923d6098'
]);
formattingTests(
'v4',
fromMetadata(new Metadata(rpcMetadataV4)),
['0xec8f96437274a883afcac82d01a9defeb68209cd4f2c084632813692aa5e65ad', '0x1dbb0224910f42a14e7f1406b24c6fe8157296691b02a78756e01946038fffab']
);
formattingTests('v4', fromMetadata(new Metadata(rpcMetadataV4)), [
'0xec8f96437274a883afcac82d01a9defeb68209cd4f2c084632813692aa5e65ad',
'0x1dbb0224910f42a14e7f1406b24c6fe8157296691b02a78756e01946038fffab',
'0xc7879f4faa637a90d782070a3cb6be99a9fb0316e19a0454ce93c4f0a34712f1'
]);
formattingTests(
'v5',
fromMetadata(new Metadata(rpcMetadataV5)),
['0xec8f96437274a883afcac82d01a9defeb68209cd4f2c084632813692aa5e65ad', '0x1dbb0224910f42a14e7f1406b24c6fe8157296691b02a78756e01946038fffab']
);
formattingTests('v5', fromMetadata(new Metadata(rpcMetadataV5)), [
'0xec8f96437274a883afcac82d01a9defeb68209cd4f2c084632813692aa5e65ad',
'0x1dbb0224910f42a14e7f1406b24c6fe8157296691b02a78756e01946038fffab',
'0xc7879f4faa637a90d782070a3cb6be99a9fb0316e19a0454ce93c4f0a34712f1'
]);