* Initial work on a graphql API * Added receipts, and more transaction fields. * Finish receipts, add logs * Add transactionCount to block * Add types and . * Update Block type to be compatible with ethql * Rename nonce to transactionCount in Account, to be compatible with ethql * Update transaction, receipt and log to match ethql * Add query operator, for a range of blocks * Added ommerCount to Block * Add transactionAt and ommerAt to Block * Added sendRawTransaction mutation * Add Call and EstimateGas to graphQL API * Refactored to use hexutil.Bytes instead of HexBytes * Replace BigNum with hexutil.Big * Refactor call and estimateGas to use ethapi struct type * Replace ethgraphql.Address with common.Address * Replace ethgraphql.Hash with common.Hash * Converted most quantities to Long instead of Int * Add support for logs * Fix bug in runFilter * Restructured Transaction to work primarily with headers, so uncle data is reported properly * Add gasPrice API * Add protocolVersion API * Add syncing API * Moved schema into its own source file * Move some single use args types into anonymous structs * Add doc-comments * Fixed backend fetching to use context * Added (very) basic tests * Add documentation to the graphql schema * Fix reversion for formatting of big numbers * Correct spelling error * s/BigInt/Long/ * Update common/types.go * Fixes in response to review * Fix lint error * Updated calls on private functions * Fix typo in graphql.go * Rollback ethapi breaking changes for graphql support Co-Authored-By: Arachnid <arachnid@notdot.net>
		
			
				
	
	
		
			118 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			118 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package graphql
 | 
						|
 | 
						|
import (
 | 
						|
	"context"
 | 
						|
	"encoding/json"
 | 
						|
 | 
						|
	"github.com/graph-gophers/graphql-go/internal/exec/resolvable"
 | 
						|
	"github.com/graph-gophers/graphql-go/introspection"
 | 
						|
)
 | 
						|
 | 
						|
// Inspect allows inspection of the given schema.
 | 
						|
func (s *Schema) Inspect() *introspection.Schema {
 | 
						|
	return introspection.WrapSchema(s.schema)
 | 
						|
}
 | 
						|
 | 
						|
// ToJSON encodes the schema in a JSON format used by tools like Relay.
 | 
						|
func (s *Schema) ToJSON() ([]byte, error) {
 | 
						|
	result := s.exec(context.Background(), introspectionQuery, "", nil, &resolvable.Schema{
 | 
						|
		Query:  &resolvable.Object{},
 | 
						|
		Schema: *s.schema,
 | 
						|
	})
 | 
						|
	if len(result.Errors) != 0 {
 | 
						|
		panic(result.Errors[0])
 | 
						|
	}
 | 
						|
	return json.MarshalIndent(result.Data, "", "\t")
 | 
						|
}
 | 
						|
 | 
						|
var introspectionQuery = `
 | 
						|
  query {
 | 
						|
    __schema {
 | 
						|
      queryType { name }
 | 
						|
      mutationType { name }
 | 
						|
      subscriptionType { name }
 | 
						|
      types {
 | 
						|
        ...FullType
 | 
						|
      }
 | 
						|
      directives {
 | 
						|
        name
 | 
						|
        description
 | 
						|
        locations
 | 
						|
        args {
 | 
						|
          ...InputValue
 | 
						|
        }
 | 
						|
      }
 | 
						|
    }
 | 
						|
  }
 | 
						|
  fragment FullType on __Type {
 | 
						|
    kind
 | 
						|
    name
 | 
						|
    description
 | 
						|
    fields(includeDeprecated: true) {
 | 
						|
      name
 | 
						|
      description
 | 
						|
      args {
 | 
						|
        ...InputValue
 | 
						|
      }
 | 
						|
      type {
 | 
						|
        ...TypeRef
 | 
						|
      }
 | 
						|
      isDeprecated
 | 
						|
      deprecationReason
 | 
						|
    }
 | 
						|
    inputFields {
 | 
						|
      ...InputValue
 | 
						|
    }
 | 
						|
    interfaces {
 | 
						|
      ...TypeRef
 | 
						|
    }
 | 
						|
    enumValues(includeDeprecated: true) {
 | 
						|
      name
 | 
						|
      description
 | 
						|
      isDeprecated
 | 
						|
      deprecationReason
 | 
						|
    }
 | 
						|
    possibleTypes {
 | 
						|
      ...TypeRef
 | 
						|
    }
 | 
						|
  }
 | 
						|
  fragment InputValue on __InputValue {
 | 
						|
    name
 | 
						|
    description
 | 
						|
    type { ...TypeRef }
 | 
						|
    defaultValue
 | 
						|
  }
 | 
						|
  fragment TypeRef on __Type {
 | 
						|
    kind
 | 
						|
    name
 | 
						|
    ofType {
 | 
						|
      kind
 | 
						|
      name
 | 
						|
      ofType {
 | 
						|
        kind
 | 
						|
        name
 | 
						|
        ofType {
 | 
						|
          kind
 | 
						|
          name
 | 
						|
          ofType {
 | 
						|
            kind
 | 
						|
            name
 | 
						|
            ofType {
 | 
						|
              kind
 | 
						|
              name
 | 
						|
              ofType {
 | 
						|
                kind
 | 
						|
                name
 | 
						|
                ofType {
 | 
						|
                  kind
 | 
						|
                  name
 | 
						|
                }
 | 
						|
              }
 | 
						|
            }
 | 
						|
          }
 | 
						|
        }
 | 
						|
      }
 | 
						|
    }
 | 
						|
  }
 | 
						|
`
 |