Include api.consts in api.derive methods (#1084)

* Bring back derive changes

* Fix fees tests

* contract fees for v1.0

* Contract fees v1.0 test

* Bring back console.logs

* Uase api.consts instead

* linter fixes

* more linter nits

* Fixed staking & session

* .skip()

* Formatting nits
This commit is contained in:
Stefanie Doll
2019-07-10 16:56:11 +02:00
committed by Jaco Greeff
parent 50a3a40cfd
commit 1393c8c5cf
7 changed files with 195 additions and 63 deletions
+91 -27
View File
@@ -6,43 +6,107 @@ import { ApiInterface$Rx } from '@polkadot/api/types';
import { DerivedContractFees } from '../types';
import BN from 'bn.js';
import { Observable } from 'rxjs';
import { combineLatest, Observable, of } from 'rxjs';
import { map } from 'rxjs/operators';
import { drr } from '../util/drr';
const ZERO = new BN(0);
/**
* Retrieves all the contract fees
* @name fees
* @returns An object containing the combined results of the queries for
* all relevant contract fees as declared in the substrate chain spec.
* @example
* <BR>
*
* ```javascript
* api.derive.contracts.fees(([creationFee, transferFee]) => {
* console.log(`The fee for creating a new contract on this chain is ${creationFee} units. The fee required to call this contract is ${transferFee} units.`);
* });
* ```
*/
export function fees (api: ApiInterface$Rx) {
return (): Observable<DerivedContractFees> => {
const queryBase = api.query.contracts || api.query.contract;
// FIXME A numnber of these are being moved https://github.com/paritytech/substrate/pull/2883
return (api.queryMulti([
queryBase.callBaseFee,
queryBase.contractFee,
queryBase.createBaseFee,
queryBase.creationFee,
queryBase.rentByteFee,
queryBase.rentDepositOffset,
queryBase.transactionBaseFee,
queryBase.transactionByteFee,
queryBase.transferFee,
queryBase.tombstoneDeposit
]) as any as Observable<Array<BN>>).pipe(
map(([callBaseFee, contractFee, createBaseFee, creationFee, rentByteFee, rentDepositOffset, transactionBaseFee, transactionByteFee, transferFee, tombstoneDeposit]) => ({
callBaseFee,
contractFee,
createBaseFee,
creationFee,
rentByteFee,
rentDepositOffset,
transactionBaseFee,
transactionByteFee,
transferFee,
tombstoneDeposit
} as DerivedContractFees)),
if (api.query.contract && !api.query.contract.rentByteFee) {
// Only for 1.0 support. rentByteFee, rentDepositOffset, tombstoneDeposit are not available in substrate 1.0.
// @TODO remove this once 1.0 support is dropped
return (combineLatest([
of([ZERO, ZERO, ZERO]),
api.queryMulti([
queryBase.callBaseFee,
queryBase.contractFee,
queryBase.createBaseFee,
queryBase.creationFee,
queryBase.transactionBaseFee,
queryBase.transactionByteFee,
queryBase.transferFee
])
]) as any as Observable<Array<Array<BN>>>).pipe(
map(([
[rentByteFee, rentDepositOffset, tombstoneDeposit],
[callBaseFee, contractFee, createBaseFee, creationFee, transactionBaseFee, transactionByteFee, transferFee]
]) => ({
callBaseFee,
contractFee,
createBaseFee,
creationFee,
rentByteFee,
rentDepositOffset,
tombstoneDeposit,
transactionBaseFee,
transactionByteFee,
transferFee
} as DerivedContractFees)),
drr()
);
}
return (
api.consts.contracts
// get values from api.const for substrate versions post spec_version: 101
// https://github.com/paritytech/substrate/pull/2883/files#diff-5e5e1c3aec9ddfde0a9054d062ab3db9R131
? of([
api.consts.contracts.callBaseFee,
api.consts.contracts.contractFee,
api.consts.contracts.createBaseFee,
api.consts.contracts.creationFee,
api.consts.contracts.rentByteFee,
api.consts.contracts.rentDepositOffset,
api.consts.contracts.tombstoneDeposit,
api.consts.contracts.transactionBaseFee,
api.consts.contracts.transactionByteFee,
api.consts.contracts.transferFee
]) as any as Observable<Array<BN>>
// Support versions pre spec_version 101 and get values from storage
: api.queryMulti([
queryBase.callBaseFee,
queryBase.contractFee,
queryBase.createBaseFee,
queryBase.creationFee,
queryBase.rentByteFee,
queryBase.rentDepositOffset,
queryBase.tombstoneDeposit,
queryBase.transactionBaseFee,
queryBase.transactionByteFee,
queryBase.transferFee
]) as any as Observable<Array<BN>>
).pipe(map(
([callBaseFee, contractFee, createBaseFee, creationFee, rentByteFee, rentDepositOffset, tombstoneDeposit, transactionBaseFee, transactionByteFee, transferFee]) => ({
callBaseFee,
contractFee,
createBaseFee,
creationFee,
rentByteFee,
rentDepositOffset,
tombstoneDeposit,
transactionBaseFee,
transactionByteFee,
transferFee
} as DerivedContractFees)
),
drr()
);
};