0x/ethereum-types: Add geth eth_call types.

`0x/json-schemas`: Add geth eth_call properties to `CallData`.
`@0x/web3-wrapper`: Add geth geth eth_call support.
This commit is contained in:
Lawrence Forman
2020-07-01 15:26:08 -04:00
parent b2dc6ad2fa
commit 13ae335811
8 changed files with 92 additions and 1 deletions

View File

@@ -1,4 +1,13 @@
[
{
"version": "7.2.0",
"changes": [
{
"note": "Add geth eth_call support",
"pr": 2620
}
]
},
{
"version": "7.1.0",
"changes": [

View File

@@ -6,6 +6,7 @@ import {
BlockWithTransactionData,
CallData,
CallTxDataBase,
GethCallOverrides,
LogEntry,
RawLogEntry,
Transaction,
@@ -22,6 +23,7 @@ import {
BlockWithTransactionDataRPC,
CallDataRPC,
CallTxDataBaseRPC,
GethCallOverridesRPC,
TransactionReceiptRPC,
TransactionRPC,
TxDataRPC,
@@ -168,6 +170,32 @@ export const marshaller = {
};
return callDataRPC;
},
/**
* Marshall call overrides parameter for for a geth eth_call.
* @param overrides overrides to marshal
* @return marshalled overrides
*/
marshalCallOverrides(overrides: GethCallOverrides): GethCallOverridesRPC {
const marshalled: GethCallOverridesRPC = {};
for (const address in overrides) {
if (address) {
const override = overrides[address];
const marshalledOverride: GethCallOverridesRPC[keyof GethCallOverridesRPC] = (marshalled[
marshaller.marshalAddress(address)
] = {});
if (override.code !== undefined) {
marshalledOverride.code = override.code;
}
if (override.nonce !== undefined) {
marshalledOverride.nonce = utils.encodeAmountAsHexString(override.nonce);
}
if (override.balance !== undefined) {
marshalledOverride.balance = utils.encodeAmountAsHexString(override.balance);
}
}
}
return marshalled;
},
/**
* Marshall address
* @param address address to marshall

View File

@@ -85,6 +85,14 @@ export interface CallDataRPC extends CallTxDataBaseRPC {
from?: string;
}
export interface GethCallOverridesRPC {
[address: string]: {
code?: string;
nonce?: string;
balance?: string;
};
}
// NodeType represents the type of the backing Ethereum node.
export enum NodeType {
Geth = 'GETH',

View File

@@ -562,9 +562,10 @@ export class Web3Wrapper {
}
const marshalledDefaultBlock = marshaller.marshalBlockParam(defaultBlock);
const callDataHex = marshaller.marshalCallData(callData);
const overrides = marshaller.marshalCallOverrides(callData.overrides || {});
const rawCallResult = await this.sendRawPayloadAsync<string>({
method: 'eth_call',
params: [callDataHex, marshalledDefaultBlock],
params: [callDataHex, marshalledDefaultBlock, overrides],
});
return rawCallResult;
}