2018-08-13 18:25:21 +00:00
import eth_common , hexstrings
#[
Notes :
* Some of the types suppose ' n u l l ' when there is no appropriate value .
To allow for this , currently these values are refs so the JSON transform can convert to ` JNull ` .
2018-08-15 12:14:32 +00:00
* Parameter objects from users must have their data verified so will use EthAddressStr instead of EthAddres , for example
* Objects returned to the user can use native Nimbus types , where hexstrings provides converters to hex strings .
This is because returned arrays in JSON is
a ) not an efficient use of space
b ) not the format the user expects ( for example addresses are expected to be hex strings prefixed by " 0x " )
2018-08-13 18:25:21 +00:00
] #
type
SyncState * = object
2018-08-15 12:14:32 +00:00
# Returned to user
startingBlock * : BlockNumber
currentBlock * : BlockNumber
highestBlock * : BlockNumber
2018-08-13 18:25:21 +00:00
EthSend * = object
2018-08-15 12:14:32 +00:00
# Parameter from user
2018-08-13 18:25:21 +00:00
source * : EthAddressStr # the address the transaction is send from.
to * : EthAddressStr # (optional when creating new contract) the address the transaction is directed to.
gas * : GasInt # (optional, default: 90000) integer of the gas provided for the transaction execution. It will return unused gas.
gasPrice * : GasInt # (optional, default: To-Be-Determined) integer of the gasPrice used for each paid gas.
value * : int # (optional) integer of the value sent with this transaction.
data * : EthHashStr # TODO: Support more data. The compiled code of a contract OR the hash of the invoked method signature and encoded parameters. For details see Ethereum Contract ABI.
nonce * : int # (optional) integer of a nonce. This allows to overwrite your own pending transactions that use the same nonce
EthCall * = object
2018-08-15 12:14:32 +00:00
# Parameter from user
2018-08-13 18:25:21 +00:00
source * : EthAddressStr # (optional) The address the transaction is send from.
to * : EthAddressStr # The address the transaction is directed to.
gas * : GasInt # (optional) Integer of the gas provided for the transaction execution. eth_call consumes zero gas, but this parameter may be needed by some executions.
gasPrice * : GasInt # (optional) Integer of the gasPrice used for each paid gas.
value * : int # (optional) Integer of the value sent with this transaction.
data * : EthHashStr # (optional) Hash of the method signature and encoded parameters. For details see Ethereum Contract ABI.
## A block object, or null when no block was found
## Note that this includes slightly different information from eth_common.BlockHeader
BlockObject * = ref object
2018-08-15 12:14:32 +00:00
# Returned to user
number * : ref BlockNumber # the block number. null when its pending block.
hash * : ref Hash256 # hash of the block. null when its pending block.
parentHash * : Hash256 # hash of the parent block.
nonce * : uint64 # hash of the generated proof-of-work. null when its pending block.
sha3Uncles * : Hash256 # SHA3 of the uncles data in the block.
logsBloom * : ref BloomFilter # the bloom filter for the logs of the block. null when its pending block.
transactionsRoot * : Hash256 # the root of the transaction trie of the block.
stateRoot * : Hash256 # the root of the final state trie of the block.
receiptsRoot * : Hash256 # the root of the receipts trie of the block.
miner * : EthAddress # the address of the beneficiary to whom the mining rewards were given.
difficulty * : UInt256 # integer of the difficulty for this block.
totalDifficulty * : UInt256 # integer of the total difficulty of the chain until this block.
extraData * : Blob # the "extra data" field of this block.
2018-08-13 18:25:21 +00:00
size * : int # integer the size of this block in bytes.
2018-08-15 12:14:32 +00:00
gasLimit * : GasInt # the maximum gas allowed in this block.
gasUsed * : GasInt # the total used gas by all transactions in this block.
timestamp * : EthTime # the unix timestamp for when the block was collated.
transactions * : seq [ Transaction ] # list of transaction objects, or 32 Bytes transaction hashes depending on the last given parameter.
2018-08-20 19:51:25 +00:00
uncles * : seq [ Hash256 ] # list of uncle hashes.
2018-08-13 18:25:21 +00:00
TransactionObject * = object # A transaction object, or null when no transaction was found:
2018-08-15 12:14:32 +00:00
# Returned to user
hash * : Hash256 # hash of the transaction.
2018-08-17 18:53:22 +00:00
nonce * : UInt256 # the number of transactions made by the sender prior to this one.
2018-08-15 12:14:32 +00:00
blockHash * : ref Hash256 # hash of the block where this transaction was in. null when its pending.
blockNumber * : ref BlockNumber # block number where this transaction was in. null when its pending.
transactionIndex * : ref int64 # integer of the transactions index position in the block. null when its pending.
source * : EthAddress # address of the sender.
to * : ref EthAddress # address of the receiver. null when its a contract creation transaction.
2018-08-17 18:53:22 +00:00
value * : UInt256 # value transferred in Wei.
2018-08-13 18:25:21 +00:00
gasPrice * : GasInt # gas price provided by the sender in Wei.
gas * : GasInt # gas provided by the sender.
2018-08-16 19:25:50 +00:00
input * : Blob # the data send along with the transaction.
2018-08-13 18:25:21 +00:00
LogObject * = object
2018-08-15 12:14:32 +00:00
# Returned to user
2018-08-13 18:25:21 +00:00
removed * : bool # true when the log was removed, due to a chain reorganization. false if its a valid log.
2018-08-15 12:14:32 +00:00
logIndex * : ref int # integer of the log index position in the block. null when its pending log.
2018-08-13 18:25:21 +00:00
transactionIndex * : ref int # integer of the transactions index position log was created from. null when its pending log.
2018-08-15 12:14:32 +00:00
transactionHash * : ref Hash256 # hash of the transactions this log was created from. null when its pending log.
blockHash * : ref Hash256 # hash of the block where this log was in. null when its pending. null when its pending log.
blockNumber * : ref BlockNumber # the block number where this log was in. null when its pending. null when its pending log.
address * : EthAddress # address from which this log originated.
data * : seq [ Hash256 ] # contains one or more 32 Bytes non-indexed arguments of the log.
topics * : array [ 4 , Hash256 ] # array of 0 to 4 32 Bytes DATA of indexed log arguments.
2018-08-13 18:25:21 +00:00
# (In solidity: The first topic is the hash of the signature of the event.
# (e.g. Deposit(address,bytes32,uint256)), except you declared the event with the anonymous specifier.)
2018-08-17 22:51:05 +00:00
ReceiptObject * = object
# A transaction receipt object, or null when no receipt was found:
2018-08-20 19:29:40 +00:00
transactionHash * : Hash256 # hash of the transaction.
2018-08-17 22:51:05 +00:00
transactionIndex * : int # integer of the transactions index position in the block.
2018-08-20 19:29:40 +00:00
blockHash * : Hash256 # hash of the block where this transaction was in.
blockNumber * : BlockNumber # block number where this transaction was in.
2018-08-17 22:51:05 +00:00
sender * : EthAddress # address of the sender.
to * : ref EthAddress # address of the receiver. null when its a contract creation transaction.
cumulativeGasUsed * : int # the total amount of gas used when this transaction was executed in the block.
gasUsed * : int # the amount of gas used by this specific transaction alone.
2018-08-20 19:29:40 +00:00
contractAddress * : ref EthAddress # the contract address created, if the transaction was a contract creation, otherwise null.
2018-08-17 22:51:05 +00:00
logs * : seq [ LogObject ] # TODO: See Wiki for details. list of log objects, which this transaction generated.
logsBloom * : BloomFilter # bloom filter for light clients to quickly retrieve related logs.
2018-08-20 19:29:40 +00:00
root * : Hash256 # post-transaction stateroot (pre Byzantium).
2018-08-17 22:51:05 +00:00
status * : int # 1 = success, 0 = failure.