diff --git a/openrpc/eth-api.json b/openrpc/eth-api.json
index 7c73f947dd3ace05c56ce880ec44e6b6c3a8e2d8..da2e5c00c3a968d5bf465e570fcfc6c2330a6e45 100644
--- a/openrpc/eth-api.json
+++ b/openrpc/eth-api.json
@@ -1044,7 +1044,7 @@
    },
    "AccountProof": {
     "type": "object",
-    "title": "Account proof",
+    "title": "AccountProof",
     "required": [
      "address",
      "accountProof",
@@ -1115,6 +1115,7 @@
     }
    },
    "Block": {
+    "id": "Block",
     "type": "object",
     "title": "Block object",
     "required": [
@@ -1546,7 +1547,7 @@
    },
    "StorageProof": {
     "type": "object",
-    "title": "Storage proof",
+    "title": "StorageProof",
     "required": [
      "key",
      "value",
@@ -1926,64 +1927,64 @@
    },
    "address": {
     "type": "string",
-    "title": "hex encoded address",
+    "title": "Address",
     "pattern": "^0x[0-9,a-f,A-F]{40}$"
    },
    "addresses": {
     "type": "array",
-    "title": "hex encoded address",
+    "title": "Addresses",
     "items": {
      "$ref": "#/components/schemas/address"
     }
    },
    "byte": {
     "type": "string",
-    "title": "hex encoded byte",
+    "title": "Byte",
     "pattern": "^0x([0-9,a-f,A-F]?){1,2}$"
    },
    "bytes": {
     "type": "string",
-    "title": "hex encoded bytes",
+    "title": "Bytes",
     "pattern": "^0x[0-9a-f]*$"
    },
    "bytes256": {
     "type": "string",
-    "title": "256 hex encoded bytes",
+    "title": "bytes256",
     "pattern": "^0x[0-9a-f]{512}$"
    },
    "bytes32": {
     "type": "string",
-    "title": "32 hex encoded bytes",
+    "title": "bytes32",
     "pattern": "^0x([0-9a-f][0-9a-f]){0,32}$"
    },
    "bytes65": {
     "type": "string",
-    "title": "65 hex encoded bytes",
+    "title": "bytes645",
     "pattern": "^0x[0-9a-f]{512}$"
    },
    "bytes8": {
     "type": "string",
-    "title": "8 hex encoded bytes",
+    "title": "bytes8",
     "pattern": "^0x[0-9a-f]{16}$"
    },
    "hash32": {
     "type": "string",
-    "title": "32 byte hex value",
+    "title": "Hash32",
     "pattern": "^0x([0-9a-f][0-9a-f]){0,32}$"
    },
    "uint": {
     "type": "string",
-    "title": "hex encoded unsigned integer",
+    "title": "Uint",
     "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$"
    },
    "uint256": {
     "type": "string",
-    "title": "hex encoded unsigned integer",
+    "title": "Uint256",
     "pattern": "^0x[0-9a-f]{0,64}$"
    },
    "uint64": {
     "type": "string",
-    "title": "hex encoded unsigned integer",
+    "title": "Uint64",
     "pattern": "^0x([1-9a-f][0-9a-f]{0,15})|0$"
    }
   }
diff --git a/openrpc/generate/generate.go b/openrpc/generate/generate.go
index 7bd90cdc7663ec355afce0e4cf811f21983c8460..63e0334c3219bb1ebb6f1d124235a432a2b7ef2a 100644
--- a/openrpc/generate/generate.go
+++ b/openrpc/generate/generate.go
@@ -91,7 +91,7 @@ func derefSchemaRecurse(cts *types.Components, sch spec.Schema) spec.Schema {
 		got.Schema = ""
 		sch.AllOf[i] = got
 	}
-	for k, _ := range sch.Properties {
+	for k := range sch.Properties {
 		got := derefSchemaRecurse(cts, sch.Properties[k])
 		if err := mergo.Merge(&got, sch.Properties[k]); err != nil {
 			panic(err.Error())
@@ -99,7 +99,7 @@ func derefSchemaRecurse(cts *types.Components, sch spec.Schema) spec.Schema {
 		got.Schema = ""
 		sch.Properties[k] = got
 	}
-	for k, _ := range sch.PatternProperties {
+	for k := range sch.PatternProperties {
 		got := derefSchemaRecurse(cts, sch.PatternProperties[k])
 		if err := mergo.Merge(&got, sch.PatternProperties[k]); err != nil {
 			panic(err.Error())
@@ -198,7 +198,7 @@ func funcMap(openrpc *types.OpenRPCSpec1) template.FuncMap {
 			keys := om.GetKeys()
 			objects := make([]object, 0, len(keys))
 			for _, k := range keys {
-				objects = append(objects, object{k, om.Get(k)})
+				objects = append(objects, object{Name: k, Fields: om.Get(k)})
 			}
 			return objects
 		},
diff --git a/openrpc/out/types.go b/openrpc/out/types.go
index a3941cbe63c09dd1a4b30d1d72941e08aaa16a84..186c97a4f8933467f051c14078c702c94d897dc7 100644
--- a/openrpc/out/types.go
+++ b/openrpc/out/types.go
@@ -99,41 +99,45 @@ type GoOpenRPCService interface {
 	EthGetTransactionReceipt(*EthGetTransactionReceiptParams) (*EthGetTransactionReceiptResult, error)
 }
 type BlockNumberOrTag struct {
-	FieldHexEncodedUnsignedInteger string `json:"hexEncodedUnsignedInteger"`
+	FieldUint string `json:"uint"`
 }
 type DebugGetRawHeaderParams struct {
 	FieldBlockNumberOrTag string `json:"blockNumberOrTag"`
 }
 type DebugGetRawHeaderResult struct {
-	FieldHexEncodedBytes string `json:"hexEncodedBytes"`
+	FieldBytes string `json:"bytes"`
 }
 type DebugGetRawBlockParams struct {
 	FieldBlockNumberOrTag string `json:"blockNumberOrTag"`
 }
 type DebugGetRawBlockResult struct {
-	FieldHexEncodedBytes string `json:"hexEncodedBytes"`
+	FieldBytes string `json:"bytes"`
 }
 type DebugGetRawTransactionParams struct {
-	Field32ByteHexValue string `json:"32ByteHexValue"`
+	FieldHash32 string `json:"hash32"`
 }
 type DebugGetRawTransactionResult struct {
-	FieldHexEncodedBytes string `json:"hexEncodedBytes"`
+	FieldBytes string `json:"bytes"`
 }
 type DebugGetRawReceiptsParams struct {
 	FieldBlockNumberOrTag string `json:"blockNumberOrTag"`
 }
 type ReceiptArray struct {
-	FieldHexEncodedBytes string `json:"hexEncodedBytes"`
+	FieldBytes string `json:"bytes"`
 }
 type DebugGetRawReceiptsResult struct {
-	FieldHexEncodedBytes string `json:"hexEncodedBytes"`
+	FieldBytes string `json:"bytes"`
 
 	FieldReceiptArray []string `json:"receiptArray"`
 }
-type BadBlock struct {
-	FieldHexEncodedBytes string `json:"hexEncodedBytes"`
-
-	Field32ByteHexValue string `json:"32ByteHexValue"`
+type Block struct {
+	FieldBytes string `json:"bytes"`
+}
+type Hash struct {
+	FieldHash32 string `json:"hash32"`
+}
+type Rlp struct {
+	FieldBytes string `json:"bytes"`
 }
 type BadBlockArray struct {
 	BadBlock
@@ -144,27 +148,76 @@ type DebugGetBadBlocksResult struct {
 	FieldBadBlockArray []BadBlock `json:"badBlockArray"`
 }
 type EthGetBlockByHashParams struct {
-	Field32ByteHexValue string `json:"32ByteHexValue"`
+	FieldHash32 string `json:"hash32"`
 
 	FieldHydrated bool `json:"hydrated"`
 }
-type BlockObject struct {
-	Field32ByteHexValue string `json:"32ByteHexValue"`
-
-	FieldHexEncodedUnsignedInteger string `json:"hexEncodedUnsignedInteger"`
-
-	Field256HexEncodedBytes string `json:"256HexEncodedBytes"`
-
-	FieldHexEncodedAddress string `json:"hexEncodedAddress"`
+type TotalDifficulty struct {
+	FieldUint string `json:"uint"`
+}
+type TransactionsRoot struct {
+	FieldHash32 string `json:"hash32"`
+}
+type Uncles struct {
+	FieldHash32 string `json:"hash32"`
 
-	Field8HexEncodedBytes string `json:"8HexEncodedBytes"`
+	FieldUncles []string `json:"uncles"`
+}
+type ExtraData struct {
+	FieldBytes string `json:"bytes"`
+}
+type Miner struct {
+	FieldAddress string `json:"address"`
+}
+type ParentHash struct {
+	FieldHash32 string `json:"hash32"`
+}
+type Nonce struct {
+	FieldBytes8 string `json:"bytes8"`
 
-	FieldHexEncodedBytes string `json:"hexEncodedBytes"`
+	FieldUint string `json:"uint"`
 
-	FieldUncles []string `json:"uncles"`
+	FieldUint64 string `json:"uint64"`
 }
-type Uncles struct {
-	Field32ByteHexValue string `json:"32ByteHexValue"`
+type ReceiptsRoot struct {
+	FieldHash32 string `json:"hash32"`
+}
+type BaseFeePerGas struct {
+	// An array of block base fees per gas. This includes the next block after the newest of the returned range, because this value can be derived from the newest block. Zeroes are returned for pre-EIP-1559 blocks.
+	FieldUint string `json:"uint"`
+	// An array of block base fees per gas. This includes the next block after the newest of the returned range, because this value can be derived from the newest block. Zeroes are returned for pre-EIP-1559 blocks.
+	FieldBaseFeePerGas []string `json:"baseFeePerGas"`
+}
+type LogsBloom struct {
+	FieldBytes256 string `json:"bytes256"`
+}
+type MixHash struct {
+	FieldHash32 string `json:"hash32"`
+}
+type GasUsed struct {
+	// The amount of gas used for this specific transaction alone.
+	FieldUint string `json:"uint"`
+}
+type Number struct {
+	FieldUint string `json:"uint"`
+}
+type StateRoot struct {
+	FieldHash32 string `json:"hash32"`
+}
+type Size struct {
+	FieldUint string `json:"uint"`
+}
+type Timestamp struct {
+	FieldUint string `json:"uint"`
+}
+type Difficulty struct {
+	FieldBytes string `json:"bytes"`
+}
+type GasLimit struct {
+	FieldUint string `json:"uint"`
+}
+type Sha3Uncles struct {
+	FieldHash32 string `json:"hash32"`
 }
 type EthGetBlockByHashResult struct {
 	BlockObject
@@ -178,34 +231,40 @@ type EthGetBlockByNumberResult struct {
 	BlockObject
 }
 type EthGetBlockTransactionCountByHashParams struct {
-	Field32ByteHexValue string `json:"32ByteHexValue"`
+	FieldHash32 string `json:"hash32"`
 }
 type EthGetBlockTransactionCountByHashResult struct {
-	FieldHexEncodedUnsignedInteger string `json:"hexEncodedUnsignedInteger"`
+	FieldUint string `json:"uint"`
 }
 type EthGetBlockTransactionCountByNumberParams struct {
 	FieldBlockNumberOrTag string `json:"blockNumberOrTag"`
 }
 type EthGetBlockTransactionCountByNumberResult struct {
-	FieldHexEncodedUnsignedInteger string `json:"hexEncodedUnsignedInteger"`
+	FieldUint string `json:"uint"`
 }
 type EthGetUncleCountByBlockHashParams struct {
-	Field32ByteHexValue string `json:"32ByteHexValue"`
+	FieldHash32 string `json:"hash32"`
 }
 type EthGetUncleCountByBlockHashResult struct {
-	FieldHexEncodedUnsignedInteger string `json:"hexEncodedUnsignedInteger"`
+	FieldUint string `json:"uint"`
 }
 type EthGetUncleCountByBlockNumberParams struct {
 	FieldBlockNumberOrTag string `json:"blockNumberOrTag"`
 }
 type EthGetUncleCountByBlockNumberResult struct {
-	FieldHexEncodedUnsignedInteger string `json:"hexEncodedUnsignedInteger"`
+	FieldUint string `json:"uint"`
 }
 type EthChainIdResult struct {
-	FieldHexEncodedUnsignedInteger string `json:"hexEncodedUnsignedInteger"`
+	FieldUint string `json:"uint"`
+}
+type StartingBlock struct {
+	FieldUint string `json:"uint"`
 }
-type SyncingProgress struct {
-	FieldHexEncodedUnsignedInteger string `json:"hexEncodedUnsignedInteger"`
+type CurrentBlock struct {
+	FieldUint string `json:"uint"`
+}
+type HighestBlock struct {
+	FieldUint string `json:"uint"`
 }
 type SyncingStatus struct {
 	SyncingProgress
@@ -214,44 +273,69 @@ type EthSyncingResult struct {
 	FieldSyncingStatus SyncingProgress `json:"syncingStatus"`
 }
 type EthCoinbaseResult struct {
-	FieldHexEncodedAddress string `json:"hexEncodedAddress"`
+	FieldAddress string `json:"address"`
 }
 type Accounts struct {
-	FieldHexEncodedAddress string `json:"hexEncodedAddress"`
+	FieldAddress string `json:"address"`
 }
 type EthAccountsResult struct {
-	FieldHexEncodedAddress string `json:"hexEncodedAddress"`
+	FieldAddress string `json:"address"`
 
 	FieldAccounts []string `json:"accounts"`
 }
 type EthBlockNumberResult struct {
-	FieldHexEncodedUnsignedInteger string `json:"hexEncodedUnsignedInteger"`
+	FieldUint string `json:"uint"`
 }
-type TransactionObjectGenericToAllTypes struct {
-	FieldHexEncodedByte string `json:"hexEncodedByte"`
-
-	FieldHexEncodedUnsignedInteger string `json:"hexEncodedUnsignedInteger"`
+type ChainId struct {
+	// Chain ID that this transaction is valid on.
+	FieldUint string `json:"uint"`
+}
+type Type struct {
+	FieldByte string `json:"byte"`
+}
+type Value struct {
+	FieldUint string `json:"uint"`
 
-	FieldHexEncodedBytes string `json:"hexEncodedBytes"`
+	FieldUint256 string `json:"uint256"`
+}
+type Input struct {
+	FieldBytes string `json:"bytes"`
+}
+type MaxFeePerGas struct {
+	// The maximum total fee per gas the sender is willing to pay (includes the network / base fee and miner / priority fee) in wei
+	FieldUint string `json:"uint"`
+}
+type MaxPriorityFeePerGas struct {
+	// Maximum fee per gas the sender is willing to pay to miners in wei
+	FieldUint string `json:"uint"`
+}
+type To struct {
+	// Address of the receiver or null in a contract creation transaction.
+	FieldAddress string `json:"address"`
+}
+type Address struct {
+	FieldAddress string `json:"address"`
+}
+type StorageKeys struct {
+	FieldHash32 string `json:"hash32"`
 
-	FieldHexEncodedAddress string `json:"hexEncodedAddress"`
+	FieldStorageKeys []string `json:"storageKeys"`
+}
+type AccessList struct {
 	// EIP-2930 access list
 	AccessListEntry
 	// EIP-2930 access list
 	FieldAccessList []AccessListEntry `json:"accessList"`
 }
-type AccessListEntry struct {
-	FieldHexEncodedAddress string `json:"hexEncodedAddress"`
-
-	Field32ByteHexValue string `json:"32ByteHexValue"`
-
-	FieldStorageKeys []string `json:"storageKeys"`
+type From struct {
+	FieldAddress string `json:"address"`
 }
-type StorageKeys struct {
-	Field32ByteHexValue string `json:"32ByteHexValue"`
+type Gas struct {
+	FieldUint string `json:"uint"`
 }
-type AccessList struct {
-	AccessListEntry
+type GasPrice struct {
+	// The gas price willing to be paid by the sender in wei
+	FieldUint string `json:"uint"`
 }
 type EthCallParams struct {
 	TransactionObjectGenericToAllTypes
@@ -259,7 +343,7 @@ type EthCallParams struct {
 	FieldBlockNumberOrTag string `json:"blockNumberOrTag"`
 }
 type EthCallResult struct {
-	FieldHexEncodedBytes string `json:"hexEncodedBytes"`
+	FieldBytes string `json:"bytes"`
 }
 type EthEstimateGasParams struct {
 	TransactionObjectGenericToAllTypes
@@ -267,83 +351,64 @@ type EthEstimateGasParams struct {
 	FieldBlockNumberOrTag string `json:"blockNumberOrTag"`
 }
 type EthEstimateGasResult struct {
-	FieldHexEncodedUnsignedInteger string `json:"hexEncodedUnsignedInteger"`
+	FieldUint string `json:"uint"`
 }
 type EthCreateAccessListParams struct {
 	TransactionObjectGenericToAllTypes
 
 	FieldBlockNumberOrTag string `json:"blockNumberOrTag"`
 }
-type AccessListResult struct {
-	AccessListEntry
-
-	FieldAccessList []AccessListEntry `json:"accessList"`
-
+type Error struct {
 	FieldError string `json:"error"`
-
-	FieldHexEncodedUnsignedInteger string `json:"hexEncodedUnsignedInteger"`
 }
 type EthCreateAccessListResult struct {
 	AccessListResult
 }
 type EthGasPriceResult struct {
-	FieldHexEncodedUnsignedInteger string `json:"hexEncodedUnsignedInteger"`
+	FieldUint string `json:"uint"`
 }
 type EthMaxPriorityFeePerGasResult struct {
-	FieldHexEncodedUnsignedInteger string `json:"hexEncodedUnsignedInteger"`
+	FieldUint string `json:"uint"`
 }
 type EthFeeHistoryParams struct {
 	// Requested range of blocks. Clients will return less than the requested range if not all blocks are available.
-	FieldHexEncodedUnsignedInteger string `json:"hexEncodedUnsignedInteger"`
+	FieldUint string `json:"uint"`
 	// Highest block of the requested range.
 	FieldBlockNumberOrTag string `json:"blockNumberOrTag"`
 	// Floating point value between 0 and 100.
-	FieldRewardPercentile number `json:"rewardPercentile"`
+	FieldRewardPercentile float64 `json:"rewardPercentile"`
 	// A monotonically increasing list of percentile values. For each block in the requested range, the transactions will be sorted in ascending order by effective tip per gas and the coresponding effective tip for the percentile will be determined, accounting for gas consumed.
-	FieldRewardPercentiles []number `json:"rewardPercentiles"`
+	FieldRewardPercentiles []float64 `json:"rewardPercentiles"`
 }
 type RewardPercentiles struct {
 	// Floating point value between 0 and 100.
-	FieldRewardPercentile number `json:"rewardPercentile"`
+	FieldRewardPercentile float64 `json:"rewardPercentile"`
 }
-type BaseFeePerGas struct {
-	FieldHexEncodedUnsignedInteger string `json:"hexEncodedUnsignedInteger"`
-}
-type FeeHistoryResults struct {
-	// A given percentile sample of effective priority fees per gas from a single block in ascending order, weighted by gas used. Zeroes are returned if the block is empty.
-	FieldHexEncodedUnsignedInteger string `json:"hexEncodedUnsignedInteger"`
-	// An array of block base fees per gas. This includes the next block after the newest of the returned range, because this value can be derived from the newest block. Zeroes are returned for pre-EIP-1559 blocks.
-	FieldBaseFeePerGas []string `json:"baseFeePerGas"`
-	// An array of effective priority fee per gas data points from a single block. All zeroes are returned if the block is empty.
-	FieldRewardPercentile []string `json:"rewardPercentile"`
-	// A two-dimensional array of effective priority fees per gas at the requested block percentiles.
-	FieldReward []array `json:"reward"`
+type OldestBlock struct {
+	// Lowest number block of returned range.
+	FieldUint string `json:"uint"`
 }
 type RewardPercentile struct {
 	// A given percentile sample of effective priority fees per gas from a single block in ascending order, weighted by gas used. Zeroes are returned if the block is empty.
-	FieldHexEncodedUnsignedInteger string `json:"hexEncodedUnsignedInteger"`
+	FieldUint string `json:"uint"`
 }
 type Reward struct {
 	// A given percentile sample of effective priority fees per gas from a single block in ascending order, weighted by gas used. Zeroes are returned if the block is empty.
-	FieldHexEncodedUnsignedInteger string `json:"hexEncodedUnsignedInteger"`
+	FieldUint string `json:"uint"`
 	// An array of effective priority fee per gas data points from a single block. All zeroes are returned if the block is empty.
 	FieldRewardPercentile []string `json:"rewardPercentile"`
+	// A two-dimensional array of effective priority fees per gas at the requested block percentiles.
+	FieldReward []array `json:"reward"`
 }
 type EthFeeHistoryResult struct {
 	// Fee history results.
 	FeeHistoryResults
 }
-type Address struct {
-	FieldHexEncodedAddress string `json:"hexEncodedAddress"`
+type FromBlock struct {
+	FieldUint string `json:"uint"`
 }
-type Filter struct {
-	FieldAddress string `json:"address"`
-
-	FieldHexEncodedUnsignedInteger string `json:"hexEncodedUnsignedInteger"`
-
-	FieldFilterTopicListEntry null `json:"filterTopicListEntry"`
-
-	FieldFilterTopics []FilterTopicListEntry `json:"filterTopics"`
+type ToBlock struct {
+	FieldUint string `json:"uint"`
 }
 type FilterTopicListEntry struct {
 	FieldAnyTopicMatch null `json:"anyTopicMatch"`
@@ -351,32 +416,41 @@ type FilterTopicListEntry struct {
 type FilterTopics struct {
 	FieldFilterTopicListEntry null `json:"filterTopicListEntry"`
 }
+type Topics struct {
+	FieldFilterTopicListEntry null `json:"filterTopicListEntry"`
+
+	FieldFilterTopics []FilterTopicListEntry `json:"filterTopics"`
+
+	FieldBytes32 string `json:"bytes32"`
+
+	FieldTopics []string `json:"topics"`
+}
 type EthNewFilterParams struct {
 	Filter
 }
 type EthNewFilterResult struct {
-	FieldHexEncodedUnsignedInteger string `json:"hexEncodedUnsignedInteger"`
+	FieldUint string `json:"uint"`
 }
 type EthNewBlockFilterResult struct {
-	FieldHexEncodedUnsignedInteger string `json:"hexEncodedUnsignedInteger"`
+	FieldUint string `json:"uint"`
 }
 type EthNewPendingTransactionFilterResult struct {
-	FieldHexEncodedUnsignedInteger string `json:"hexEncodedUnsignedInteger"`
+	FieldUint string `json:"uint"`
 }
 type EthUninstallFilterParams struct {
-	FieldHexEncodedUnsignedInteger string `json:"hexEncodedUnsignedInteger"`
+	FieldUint string `json:"uint"`
 }
 type EthUninstallFilterResult struct {
 	FieldSuccess bool `json:"success"`
 }
 type EthGetFilterChangesParams struct {
-	FieldHexEncodedUnsignedInteger string `json:"hexEncodedUnsignedInteger"`
+	FieldUint string `json:"uint"`
 }
 type NewBlockHashes struct {
-	Field32ByteHexValue string `json:"32ByteHexValue"`
+	FieldHash32 string `json:"hash32"`
 }
 type FilterResults struct {
-	Field32ByteHexValue string `json:"32ByteHexValue"`
+	FieldHash32 string `json:"hash32"`
 
 	FieldNewBlockHashes []string `json:"newBlockHashes"`
 }
@@ -384,7 +458,7 @@ type EthGetFilterChangesResult struct {
 	FieldFilterResults array `json:"filterResults"`
 }
 type EthGetFilterLogsParams struct {
-	FieldHexEncodedUnsignedInteger string `json:"hexEncodedUnsignedInteger"`
+	FieldUint string `json:"uint"`
 }
 type EthGetFilterLogsResult struct {
 	FieldFilterResults array `json:"filterResults"`
@@ -399,106 +473,106 @@ type EthMiningResult struct {
 	FieldMiningStatus bool `json:"miningStatus"`
 }
 type EthHashrateResult struct {
-	FieldHexEncodedUnsignedInteger string `json:"hexEncodedUnsignedInteger"`
+	FieldUint string `json:"uint"`
 }
 type EthGetWorkResult struct {
 	FieldCurrentWork []string `json:"currentWork"`
 }
 type EthSubmitWorkParams struct {
-	Field8HexEncodedBytes string `json:"8HexEncodedBytes"`
+	FieldBytes8 string `json:"bytes8"`
 
-	Field32HexEncodedBytes string `json:"32HexEncodedBytes"`
+	FieldBytes32 string `json:"bytes32"`
 }
 type EthSubmitWorkResult struct {
 	FieldSuccess bool `json:"success"`
 }
 type EthSubmitHashrateParams struct {
-	Field32HexEncodedBytes string `json:"32HexEncodedBytes"`
+	FieldBytes32 string `json:"bytes32"`
 }
 type EthSubmitHashrateResult struct {
 	FieldSuccess bool `json:"success"`
 }
 type EthSignParams struct {
-	FieldHexEncodedAddress string `json:"hexEncodedAddress"`
+	FieldAddress string `json:"address"`
 
-	FieldHexEncodedBytes string `json:"hexEncodedBytes"`
+	FieldBytes string `json:"bytes"`
 }
 type EthSignResult struct {
-	Field65HexEncodedBytes string `json:"65HexEncodedBytes"`
+	FieldBytes645 string `json:"bytes645"`
 }
 type EthSignTransactionParams struct {
 	TransactionObjectGenericToAllTypes
 }
 type EthSignTransactionResult struct {
-	FieldHexEncodedBytes string `json:"hexEncodedBytes"`
+	FieldBytes string `json:"bytes"`
 }
 type EthGetBalanceParams struct {
-	FieldHexEncodedAddress string `json:"hexEncodedAddress"`
+	FieldAddress string `json:"address"`
 
 	FieldBlockNumberOrTag string `json:"blockNumberOrTag"`
 }
 type EthGetBalanceResult struct {
-	FieldHexEncodedUnsignedInteger string `json:"hexEncodedUnsignedInteger"`
+	FieldUint string `json:"uint"`
 }
 type EthGetStorageAtParams struct {
-	FieldHexEncodedAddress string `json:"hexEncodedAddress"`
+	FieldAddress string `json:"address"`
 
-	FieldHexEncodedUnsignedInteger string `json:"hexEncodedUnsignedInteger"`
+	FieldUint256 string `json:"uint256"`
 
 	FieldBlockNumberOrTag string `json:"blockNumberOrTag"`
 }
 type EthGetStorageAtResult struct {
-	FieldHexEncodedBytes string `json:"hexEncodedBytes"`
+	FieldBytes string `json:"bytes"`
 }
 type EthGetTransactionCountParams struct {
-	FieldHexEncodedAddress string `json:"hexEncodedAddress"`
+	FieldAddress string `json:"address"`
 
 	FieldBlockNumberOrTag string `json:"blockNumberOrTag"`
 }
 type EthGetTransactionCountResult struct {
-	FieldHexEncodedUnsignedInteger string `json:"hexEncodedUnsignedInteger"`
+	FieldUint string `json:"uint"`
 }
 type EthGetCodeParams struct {
-	FieldHexEncodedAddress string `json:"hexEncodedAddress"`
+	FieldAddress string `json:"address"`
 
 	FieldBlockNumberOrTag string `json:"blockNumberOrTag"`
 }
 type EthGetCodeResult struct {
-	FieldHexEncodedBytes string `json:"hexEncodedBytes"`
+	FieldBytes string `json:"bytes"`
 }
 type EthGetProofParams struct {
-	FieldHexEncodedAddress string `json:"hexEncodedAddress"`
+	FieldAddress string `json:"address"`
 
-	Field32ByteHexValue string `json:"32ByteHexValue"`
+	FieldHash32 string `json:"hash32"`
 
 	FieldStorageKeys []string `json:"storageKeys"`
 
 	FieldBlockNumberOrTag string `json:"blockNumberOrTag"`
 }
 type AccountProof struct {
-	FieldHexEncodedBytes string `json:"hexEncodedBytes"`
+	FieldBytes string `json:"bytes"`
 
 	FieldAccountProof []string `json:"accountProof"`
-
-	FieldHexEncodedAddress string `json:"hexEncodedAddress"`
-
-	FieldHexEncodedUnsignedInteger string `json:"hexEncodedUnsignedInteger"`
-
-	Field32ByteHexValue string `json:"32ByteHexValue"`
-
-	FieldStorageProof []StorageProof `json:"storageProof"`
 }
-type StorageProof struct {
-	Field32ByteHexValue string `json:"32ByteHexValue"`
-
-	FieldHexEncodedBytes string `json:"hexEncodedBytes"`
+type Balance struct {
+	FieldUint256 string `json:"uint256"`
+}
+type CodeHash struct {
+	FieldHash32 string `json:"hash32"`
+}
+type StorageHash struct {
+	FieldHash32 string `json:"hash32"`
+}
+type Key struct {
+	FieldHash32 string `json:"hash32"`
+}
+type Proof struct {
+	FieldBytes string `json:"bytes"`
 
 	FieldProof []string `json:"proof"`
-
-	FieldHexEncodedUnsignedInteger string `json:"hexEncodedUnsignedInteger"`
 }
-type Proof struct {
-	FieldHexEncodedBytes string `json:"hexEncodedBytes"`
+type StorageProof struct {
+	FieldStorageProof []StorageProof `json:"storageProof"`
 }
 type EthGetProofResult struct {
 	AccountProof
@@ -507,24 +581,24 @@ type EthSendTransactionParams struct {
 	TransactionObjectGenericToAllTypes
 }
 type EthSendTransactionResult struct {
-	Field32ByteHexValue string `json:"32ByteHexValue"`
+	FieldHash32 string `json:"hash32"`
 }
 type EthSendRawTransactionParams struct {
-	FieldHexEncodedBytes string `json:"hexEncodedBytes"`
+	FieldBytes string `json:"bytes"`
 }
 type EthSendRawTransactionResult struct {
-	Field32ByteHexValue string `json:"32ByteHexValue"`
+	FieldHash32 string `json:"hash32"`
 }
 type EthGetTransactionByHashParams struct {
-	Field32ByteHexValue string `json:"32ByteHexValue"`
+	FieldHash32 string `json:"hash32"`
 }
 type EthGetTransactionByHashResult struct {
 	FieldTransactionInformation object `json:"transactionInformation"`
 }
 type EthGetTransactionByBlockHashAndIndexParams struct {
-	Field32ByteHexValue string `json:"32ByteHexValue"`
+	FieldHash32 string `json:"hash32"`
 
-	FieldHexEncodedUnsignedInteger string `json:"hexEncodedUnsignedInteger"`
+	FieldUint string `json:"uint"`
 }
 type EthGetTransactionByBlockHashAndIndexResult struct {
 	FieldTransactionInformation object `json:"transactionInformation"`
@@ -532,55 +606,60 @@ type EthGetTransactionByBlockHashAndIndexResult struct {
 type EthGetTransactionByBlockNumberAndIndexParams struct {
 	FieldBlockNumberOrTag string `json:"blockNumberOrTag"`
 
-	FieldHexEncodedUnsignedInteger string `json:"hexEncodedUnsignedInteger"`
+	FieldUint string `json:"uint"`
 }
 type EthGetTransactionByBlockNumberAndIndexResult struct {
 	FieldTransactionInformation object `json:"transactionInformation"`
 }
 type EthGetTransactionReceiptParams struct {
-	Field32ByteHexValue string `json:"32ByteHexValue"`
+	FieldHash32 string `json:"hash32"`
 }
-type ReceiptInfo struct {
-	// The actual value per gas deducted from the senders account. Before EIP-1559, this is equal to the transaction's gas price. After, it is equal to baseFeePerGas + min(maxFeePerGas - baseFeePerGas, maxPriorityFeePerGas).
-	FieldHexEncodedUnsignedInteger string `json:"hexEncodedUnsignedInteger"`
-	// The post-transaction state root. Only specified for transactions included before the Byzantium upgrade.
-	Field32HexEncodedBytes string `json:"32HexEncodedBytes"`
-
-	Log
-
-	FieldLogs []Log `json:"logs"`
-
-	Field32ByteHexValue string `json:"32ByteHexValue"`
+type ContractAddress struct {
+	FieldAddress string `json:"address"`
 	// The contract address created, if the transaction was a contract creation, otherwise null.
 	FieldContractAddress string `json:"contractAddress"`
-	// Address of the receiver or null in a contract creation transaction.
-	FieldHexEncodedAddress string `json:"hexEncodedAddress"`
-
-	Field256HexEncodedBytes string `json:"256HexEncodedBytes"`
 }
-type Log struct {
+type Root struct {
+	// The post-transaction state root. Only specified for transactions included before the Byzantium upgrade.
+	FieldBytes32 string `json:"bytes32"`
+}
+type TransactionIndex struct {
+	FieldUint string `json:"uint"`
+}
+type CumulativeGasUsed struct {
+	// The sum of gas used by this transaction and all preceding transactions in the same block.
+	FieldUint string `json:"uint"`
+}
+type TransactionHash struct {
+	FieldHash32 string `json:"hash32"`
+}
+type LogIndex struct {
+	FieldUint string `json:"uint"`
+}
+type Removed struct {
 	FieldRemoved bool `json:"removed"`
-
-	Field32ByteHexValue string `json:"32ByteHexValue"`
-
-	FieldHexEncodedUnsignedInteger string `json:"hexEncodedUnsignedInteger"`
-
-	FieldHexEncodedBytes string `json:"hexEncodedBytes"`
-
-	Field32HexEncodedBytes string `json:"32HexEncodedBytes"`
-
-	FieldTopics []string `json:"topics"`
-
-	FieldHexEncodedAddress string `json:"hexEncodedAddress"`
 }
-type Topics struct {
-	Field32HexEncodedBytes string `json:"32HexEncodedBytes"`
+type BlockHash struct {
+	FieldHash32 string `json:"hash32"`
+}
+type BlockNumber struct {
+	FieldUint string `json:"uint"`
+}
+type Data struct {
+	FieldBytes string `json:"bytes"`
 }
 type Logs struct {
 	Log
+
+	FieldLogs []Log `json:"logs"`
 }
-type ContractAddress struct {
-	FieldHexEncodedAddress string `json:"hexEncodedAddress"`
+type Status struct {
+	// Either 1 (success) or 0 (failure). Only specified for transactions included after the Byzantium upgrade.
+	FieldUint string `json:"uint"`
+}
+type EffectiveGasPrice struct {
+	// The actual value per gas deducted from the senders account. Before EIP-1559, this is equal to the transaction's gas price. After, it is equal to baseFeePerGas + min(maxFeePerGas - baseFeePerGas, maxPriorityFeePerGas).
+	FieldUint string `json:"uint"`
 }
 type EthGetTransactionReceiptResult struct {
 	ReceiptInfo
diff --git a/openrpc/parse/parse.go b/openrpc/parse/parse.go
index 2152aa267941e2e56b6a786ba08869d663096cfc..5f43a25bf77e5fc121f7ce9ce1baef1306d6491b 100644
--- a/openrpc/parse/parse.go
+++ b/openrpc/parse/parse.go
@@ -31,8 +31,8 @@ func persistFields(prev, next spec.Schema) spec.Schema {
 }
 
 func resolveSchema(openrpc *types.OpenRPCSpec1, sch spec.Schema) spec.Schema {
-	doc, _, _ := sch.Ref.GetPointer().Get(openrpc)
-
+	pt := sch.Ref.GetPointer()
+	doc, _, _ := pt.Get(openrpc)
 	if s, ok := doc.(spec.Schema); ok {
 		sch = persistFields(sch, s)
 	} else if cd, ok := doc.(*types.ContentDescriptor); ok {
@@ -49,6 +49,8 @@ func getConcreteType(in string) string {
 	switch in {
 	case reflect.Bool.String(), "boolean":
 		return reflect.Bool.String()
+	case "number":
+		return "float64"
 	default:
 		return in
 	}
@@ -71,31 +73,30 @@ func dereference(openrpc *types.OpenRPCSpec1, name string, sch spec.Schema, om *
 	if len(sch.Properties) > 0 {
 		for key, value := range sch.Properties {
 			value.Title = key
-			dereference(openrpc, sch.Title, value, om)
+			dereference(openrpc, key, value, om)
 		}
-		om.Set(name, types.BasicType{sch.Description, sch.Title, util.CamelCase(sch.Title)})
+		om.Set(name, types.BasicType{
+			Desc: sch.Description, Name: sch.Title, Type: util.CamelCase(sch.Title)})
 		return
 	} else if len(sch.OneOf) > 0 {
 		next := sch.OneOf[0]
 		dereference(openrpc, sch.Title, next, om)
-		om.Set(name, types.BasicType{sch.Description, sch.Title, getObjectType(openrpc, resolveSchema(openrpc, next))})
+		om.Set(name, types.BasicType{Desc: sch.Description, Name: sch.Title, Type: getObjectType(openrpc, resolveSchema(openrpc, next))})
 		return
 	} else if sch.Items != nil {
 		if sch.Items.Schema != nil {
 			dereference(openrpc, sch.Title, *sch.Items.Schema, om)
 			dereference(openrpc, name, persistTitleAndDesc(sch, *sch.Items.Schema), om)
-			om.Set(name, types.BasicType{sch.Description, sch.Title, fmt.Sprintf("[]%s", getObjectType(openrpc, persistTitleAndDesc(sch, *sch.Items.Schema)))})
+			om.Set(name, types.BasicType{Desc: sch.Description, Name: sch.Title, Type: fmt.Sprintf("[]%s", getObjectType(openrpc, persistTitleAndDesc(sch, *sch.Items.Schema)))})
 		} else if len(sch.Items.Schemas) > 0 {
-			om.Set(name, types.BasicType{sch.Description, sch.Title, "[]string"})
+			om.Set(name, types.BasicType{Desc: sch.Description, Name: sch.Title, Type: "[]string"})
 		}
 		return
 	}
-
 	if len(sch.Type) == 0 {
 		return
 	}
-
-	om.Set(name, types.BasicType{sch.Description, sch.Title, getConcreteType(sch.Type[0])})
+	om.Set(name, types.BasicType{Desc: sch.Description, Name: sch.Title, Type: getConcreteType(sch.Type[0])})
 	return
 }
 
diff --git a/openrpc/parse/parsing.go b/openrpc/parse/parsing.go
new file mode 100644
index 0000000000000000000000000000000000000000..ef18b538dc32ec2058ea7832b0ea58d662e591d5
--- /dev/null
+++ b/openrpc/parse/parsing.go
@@ -0,0 +1,103 @@
+package parse
+
+import (
+	"strings"
+
+	"gfx.cafe/open/jrpc/openrpc/types"
+	"gfx.cafe/open/jrpc/openrpc/util"
+	"github.com/go-openapi/spec"
+)
+
+type GoStruct struct {
+	Name        string
+	Description string
+
+	Fields map[string]string
+}
+
+type GoField struct {
+	Name     string
+	Type     *GoType
+	Optional bool
+
+	Description string
+}
+
+type GoType struct {
+	Name string
+	Type string
+
+	Description string
+}
+
+type GoGlobal struct {
+	Structs map[string]*GoStruct
+	Types   map[string]*GoType
+	Methods map[string]*GoMethod
+}
+
+type GoMethod struct {
+	Input  string
+	Output string
+	Name   string
+}
+
+func (g *GoGlobal) ReadOpenRPC(s types.OpenRPCSpec1) {
+	for k, v := range s.Components.Schemas {
+		g.AddSchema(k, v)
+	}
+	for _, v := range s.Methods {
+		g.AddMethod(v.Name, v)
+	}
+}
+
+func (g *GoGlobal) AddSchema(name string, m spec.Schema) {
+	if len(m.Type) > 0 {
+		switch m.Type[0] {
+		case "string":
+		case "number":
+		case "boolean":
+		case "object":
+		case "array":
+		default:
+		}
+		return
+	}
+	if len(m.OneOf) > 0 {
+		//todo: handle
+		return
+	}
+}
+
+func (g *GoGlobal) AddMethod(name string, m types.Method) {
+	inStruct := "Params" + util.CamelCase(name)
+	outStruct := ""
+	if m.Result != nil {
+		outStruct = "Result" + util.CamelCase(name)
+	}
+	g.Methods[name] = &GoMethod{
+		Input:  inStruct,
+		Output: outStruct,
+		Name:   util.CamelCase(name),
+	}
+}
+
+func (g *GoGlobal) AddStruct(name string, m spec.Schema) {
+	s := &GoStruct{}
+	g.Structs[name] = s
+	s.Name = name
+	s.Description = m.Description
+	s.Fields = map[string]string{}
+	for k, v := range m.Properties {
+		g.AddSchema(k, v)
+		if ref := v.Ref.GetPointer(); ref != nil {
+			refstr := strings.ToTitle(ref.String())
+			s.Fields[k] = refstr
+		} else {
+			if len(v.Type) > 0 {
+				refstr := v.Type[0]
+				s.Fields[k] = refstr
+			}
+		}
+	}
+}
diff --git a/openrpc/parse/testdata/execution-api/schemas/base-types.yaml b/openrpc/parse/testdata/execution-api/schemas/base-types.yaml
index a657f63301a36019c4a3910ccfdf204c9be18697..6d4b5e8a0130960e80b3fc350685d4196e70f034 100644
--- a/openrpc/parse/testdata/execution-api/schemas/base-types.yaml
+++ b/openrpc/parse/testdata/execution-api/schemas/base-types.yaml
@@ -1,49 +1,49 @@
 address:
-  title: hex encoded address
+  title: Address
   type: string
   pattern: ^0x[0-9,a-f,A-F]{40}$
 addresses:
-  title: hex encoded address
+  title: Addresses
   type: array
   items:
     $ref: '#/components/schemas/address'
 byte:
-  title: hex encoded byte
+  title: Byte
   type: string
   pattern: ^0x([0-9,a-f,A-F]?){1,2}$
 bytes:
-  title: hex encoded bytes
+  title: Bytes
   type: string
   pattern: ^0x[0-9a-f]*$
 bytes8:
-  title: 8 hex encoded bytes
+  title: bytes8
   type: string
   pattern: ^0x[0-9a-f]{16}$
 bytes32:
-  title: 32 hex encoded bytes
+  title: bytes32
   type: string
   pattern: ^0x([0-9a-f][0-9a-f]){0,32}$
 bytes256:
-  title: 256 hex encoded bytes
+  title: bytes256
   type: string
   pattern: ^0x[0-9a-f]{512}$
 bytes65:
-  title: 65 hex encoded bytes
+  title: bytes645
   type: string
   pattern: ^0x[0-9a-f]{512}$
 uint:
-  title: hex encoded unsigned integer
+  title: Uint
   type: string
   pattern: ^0x([1-9a-f]+[0-9a-f]*|0)$
 uint64:
-  title: hex encoded unsigned integer
+  title: Uint64
   type: string
   pattern: ^0x([1-9a-f][0-9a-f]{0,15})|0$
 uint256:
-  title: hex encoded unsigned integer
+  title: Uint256
   type: string
   pattern: ^0x[0-9a-f]{0,64}$
 hash32:
-  title: 32 byte hex value
+  title: Hash32
   type: string
   pattern: ^0x([0-9a-f][0-9a-f]){0,32}$
diff --git a/openrpc/parse/testdata/execution-api/schemas/block.yaml b/openrpc/parse/testdata/execution-api/schemas/block.yaml
index 00f57610339bd93d9a968ff1b92e7ecc87178c91..40605c06782a961e0ccc1e610159e87b36a98e0a 100644
--- a/openrpc/parse/testdata/execution-api/schemas/block.yaml
+++ b/openrpc/parse/testdata/execution-api/schemas/block.yaml
@@ -1,4 +1,5 @@
 Block:
+  id: Block
   title: Block object
   type: object
   required:
diff --git a/openrpc/parse/testdata/execution-api/schemas/state.yaml b/openrpc/parse/testdata/execution-api/schemas/state.yaml
index e50a968b3da6297bac8d2d1f7a5ab46f43b468d4..ac7af8b827f9bad40e0e3b10ec127fa542d1f15e 100644
--- a/openrpc/parse/testdata/execution-api/schemas/state.yaml
+++ b/openrpc/parse/testdata/execution-api/schemas/state.yaml
@@ -1,5 +1,5 @@
 AccountProof:
-  title: Account proof
+  title: AccountProof
   type: object
   required:
     - address
@@ -36,7 +36,7 @@ AccountProof:
       items:
         $ref: '#/components/schemas/StorageProof'
 StorageProof:
-  title: Storage proof
+  title: StorageProof
   type: object
   required:
     - key
diff --git a/openrpc/templates/types.gotmpl b/openrpc/templates/types.gotmpl
index 3c005028470073e844b928c3045717f341dd22e8..644390e81e52e4a99f09de01accee6996a8fd37a 100644
--- a/openrpc/templates/types.gotmpl
+++ b/openrpc/templates/types.gotmpl
@@ -26,14 +26,11 @@ type GoOpenRPCService interface {
 {{- range (getObjects .Objects) }}
 {{ printf "type %s struct {" .Name }}
 {{- range (getFields .Fields) }}
-{{ maybeFieldComment .Desc }}
-{{- if (eq .Name .Type) }}
-{{ printf "%s" .Name }}
-{{- else }}
-{{ printf "Field%s %s `json:\"%s\"`" .Name .Type (lowerFirst .Name) }}
+{{ maybeFieldComment .Desc }}{{- if (eq .Name .Type) }}
+{{ printf "%s" .Name }}{{- else }}
+{{ printf "Field%s %s `json:\"%s\"`" (camelCase .Name) .Type (lowerFirst .Name) }}
 {{- end }}
 {{- end }}
 {{ printf "}" }}
 {{- end }}
 
-
diff --git a/openrpc/types/objects.go b/openrpc/types/objects.go
index e84b9705a9b36f69eb7b65f9d756912247e4802f..0400292580468c1c1cb35a6b7a75155c45243889 100644
--- a/openrpc/types/objects.go
+++ b/openrpc/types/objects.go
@@ -31,7 +31,8 @@ func (fm *FieldMap) Set(key string, value BasicType) {
 }
 
 func (fm *FieldMap) Get(key string) BasicType {
-	return fm.fields[key]
+	a := fm.fields[key]
+	return a
 }
 
 func (fm *FieldMap) GetKeys() []string {