Retrieve block headers only for header-only info (#5480)

* Add parity_getBlockHeaderByNumber

* Use parity_getBlockHeaderByNumber for retrieval
This commit is contained in:
Jaco Greeff 2017-05-03 14:12:06 +02:00 committed by GitHub
parent 0658e42dad
commit 70e87677b3
9 changed files with 65 additions and 45 deletions

View File

@ -14,10 +14,8 @@
// You should have received a copy of the GNU General Public License // You should have received a copy of the GNU General Public License
// along with Parity. If not, see <http://www.gnu.org/licenses/>. // along with Parity. If not, see <http://www.gnu.org/licenses/>.
import { import { inAddress, inAddresses, inBlockNumber, inData, inDeriveHash, inDeriveIndex, inHex, inNumber16, inOptions } from '../../format/input';
inAddress, inAddresses, inData, inHex, inNumber16, inOptions, inBlockNumber, inDeriveHash, inDeriveIndex import { outAccountInfo, outAddress, outAddresses, outBlock, outChainStatus, outHistogram, outHwAccountInfo, outNodeKind, outNumber, outPeers, outRecentDapps, outTransaction, outVaultMeta } from '../../format/output';
} from '../../format/input';
import { outAccountInfo, outAddress, outAddresses, outChainStatus, outHistogram, outHwAccountInfo, outNodeKind, outNumber, outPeers, outRecentDapps, outTransaction, outVaultMeta } from '../../format/output';
export default class Parity { export default class Parity {
constructor (transport) { constructor (transport) {
@ -189,6 +187,12 @@ export default class Parity {
.execute('parity_generateSecretPhrase'); .execute('parity_generateSecretPhrase');
} }
getBlockHeaderByNumber (blockNumber = 'latest') {
return this._transport
.execute('parity_getBlockHeaderByNumber', inBlockNumber(blockNumber))
.then(outBlock);
}
getDappAddresses (dappId) { getDappAddresses (dappId) {
return this._transport return this._transport
.execute('parity_getDappAddresses', dappId) .execute('parity_getDappAddresses', dappId)

View File

@ -43,7 +43,7 @@ export const subscribe = (name, from = 0, to = 'pending') =>
events.forEach((e) => { events.forEach((e) => {
Promise.all([ Promise.all([
api.eth.getBlockByNumber(e.blockNumber), api.parity.getBlockHeaderByNumber(e.blockNumber),
api.eth.getTransactionByHash(e.transactionHash) api.eth.getTransactionByHash(e.transactionHash)
]) ])
.then(([block, tx]) => { .then(([block, tx]) => {

View File

@ -158,7 +158,7 @@ export function attachEvents (contract, callback) {
} }
export function getBlock (blockNumber) { export function getBlock (blockNumber) {
return api.eth.getBlockByNumber(blockNumber); return api.parity.getBlockHeaderByNumber(blockNumber);
} }
export function callRegister (instance, id, options = {}) { export function callRegister (instance, id, options = {}) {

View File

@ -94,7 +94,7 @@ export default class Event extends Component {
Promise Promise
.all([ .all([
api.eth.getBlockByNumber(event.blockNumber), api.parity.getBlockHeaderByNumber(event.blockNumber),
getCoin(event.params.tokenreg, event.params.coin) getCoin(event.params.tokenreg, event.params.coin)
]) ])
.then(([block, coin]) => { .then(([block, coin]) => {

View File

@ -97,8 +97,8 @@ export default class Event extends Component {
return; return;
} }
api.eth api.parity
.getBlockByNumber(event.blockNumber) .getBlockHeaderByNumber(event.blockNumber)
.then((block) => { .then((block) => {
this.setState({ block }); this.setState({ block });
}); });

View File

@ -296,6 +296,19 @@ export default {
} }
}, },
getBlockHeaderByNumber: {
section: SECTION_NET,
desc: 'Returns block header information by number (same as eth_getBlockByNumber without transactions and uncles)',
params: [
{
type: BlockNumber,
desc: 'integer of a block number, or the string `\'earliest\'`, `\'latest\'` or `\'pending\'`, as in the [default block parameter](#the-default-block-parameter).',
example: fromDecimal(436)
}
],
returns: 'See [eth_getBlockByHash](#eth_getblockbyhash) (without transactions and uncles)'
},
getVaultMeta: { getVaultMeta: {
section: SECTION_VAULT, section: SECTION_VAULT,
desc: 'Returns the metadata for a specific vault', desc: 'Returns the metadata for a specific vault',

View File

@ -134,8 +134,8 @@ export default class Status {
this._store.dispatch(statusBlockNumber(blockNumber)); this._store.dispatch(statusBlockNumber(blockNumber));
this._api.eth this._api.parity
.getBlockByNumber(blockNumber) .getBlockHeaderByNumber(blockNumber)
.then((block) => { .then((block) => {
if (!block) { if (!block) {
return; return;
@ -147,7 +147,7 @@ export default class Status {
})); }));
}) })
.catch((error) => { .catch((error) => {
console.warn('status._subscribeBlockNumber', 'getBlockByNumber', error); console.warn('status._subscribeBlockNumber', 'getBlockHeaderByNumber', error);
}); });
}) })
.then((blockNumberSubscriptionId) => { .then((blockNumberSubscriptionId) => {

View File

@ -70,48 +70,52 @@ export default class Store {
} }
loadTransactions (_txhashes) { loadTransactions (_txhashes) {
const { eth } = this._api;
// Ignore special cases and if the contents of _txhashes && this.sortedHashes are the same // Ignore special cases and if the contents of _txhashes && this.sortedHashes are the same
if (Array.isArray(_txhashes) || this.sameHashList(_txhashes)) { if (Array.isArray(_txhashes) || this.sameHashList(_txhashes)) {
return; return;
} }
// Remove any tx that are edited/cancelled // Remove any tx that are edited/cancelled
this.sortedHashes this.sortedHashes.forEach((hash) => {
.forEach((hash) => { if (!_txhashes.includes(hash)) {
if (!_txhashes.includes(hash)) { this.removeHash(hash);
this.removeHash(hash); }
} });
});
// Add any new tx // Add any new tx
_txhashes _txhashes.forEach((txhash) => {
.forEach((txhash) => { if (this.sortedHashes.includes(txhash)) {
if (this.sortedHashes.includes(txhash)) { return; } return;
eth.getTransactionByHash(txhash) }
.then((tx) => {
if (!tx) { return; } this._api.eth
this.transactions[txhash] = tx; .getTransactionByHash(txhash)
// If the tx has a blockHash, let's get the blockNumber, otherwise it's ready to be added .then((tx) => {
if (tx.blockHash) { if (!tx) {
eth.getBlockByNumber(tx.blockNumber) return;
.then((block) => { }
this.blocks[tx.blockNumber] = block;
this.addHash(txhash); this.transactions[txhash] = tx;
});
} else { // If the tx has a blockHash, let's get the blockNumber, otherwise it's ready to be added
this.addHash(txhash); if (tx.blockHash) {
} this._api.parity
}); .getBlockHeaderByNumber(tx.blockNumber)
}); .then((block) => {
this.blocks[tx.blockNumber] = block;
this.addHash(txhash);
});
} else {
this.addHash(txhash);
}
});
});
} }
cancelTransaction = (txComponent, tx) => { cancelTransaction = (txComponent, tx) => {
const { parity } = this._api;
const { hash } = tx; const { hash } = tx;
parity this._api.parity
.removeTransaction(hash) .removeTransaction(hash)
.then(() => { .then(() => {
txComponent.setState({ canceled: true }); txComponent.setState({ canceled: true });
@ -122,13 +126,12 @@ export default class Store {
} }
editTransaction = (txComponent, tx) => { editTransaction = (txComponent, tx) => {
const { parity } = this._api;
const { hash, gas, gasPrice, to, from, value, input, condition } = tx; const { hash, gas, gasPrice, to, from, value, input, condition } = tx;
parity this._api.parity
.removeTransaction(hash) .removeTransaction(hash)
.then(() => { .then(() => {
parity.postTransaction({ return this._api.parity.postTransaction({
from, from,
to, to,
gas, gas,

View File

@ -146,7 +146,7 @@ export default class Event extends Component {
Promise Promise
.all([ .all([
api.eth.getBlockByNumber(event.blockNumber), api.parity.getBlockHeaderByNumber(event.blockNumber),
api.eth.getTransactionByHash(event.transactionHash) api.eth.getTransactionByHash(event.transactionHash)
]) ])
.then(([block, transaction]) => { .then(([block, transaction]) => {