coinbase / mesh-geth-sdk

go-ethereum based sdk for Mesh API
https://docs.cdp.coinbase.com/mesh/docs/getting-started/
Apache License 2.0
28 stars 29 forks source link

Mesh Generic go-ethereum-based SDK

Build once. Integrate your blockchain everywhere.

Overview

The mesh-geth-sdk repository provides a collection of packages used for interaction with the Mesh API specification. The goal of this SDK is to help accelerate Mesh API implementation on go-ethereum based chains.

Mesh is an open-source specification and set of tools that makes integrating with blockchains simpler, faster, and more reliable. The Mesh API is specified in the OpenAPI 3.0 format.

Jump to:

Quick Examples

Complete SDK Example

This ethereum example provides a reference implementation of the Mesh API for Ethereum in Golang. This example highlights how to load a configuration, load supported operation types and errors, create a new Ethereum client, and start the Mesh server.

package main

import (
    "log"

    "github.com/coinbase/mesh-geth-sdk/examples/ethereum/client"
    "github.com/coinbase/mesh-geth-sdk/examples/ethereum/config"
    sdkTypes "github.com/coinbase/mesh-geth-sdk/types"
    "github.com/coinbase/mesh-geth-sdk/utils"
)

func main() {
    // Load configuration using the ENVs in the environment.
    cfg, err := config.LoadConfiguration()
    if err != nil {
        log.Fatalln("unable to load configuration: %w", err)
    }

    // Load all the supported operation types, status
    types := sdkTypes.LoadTypes()
    errors := sdkTypes.Errors

    // Create a new ethereum client by leveraging SDK functionalities
    client, err := client.NewEthereumClient()
    if err != nil {
        log.Fatalln("cannot initialize client: %w", err)
    }

    // Bootstrap to start the Mesh API server
    err = utils.BootStrap(cfg, types, errors, client)
    if err != nil {
        log.Fatalln("unable to bootstrap Mesh server: %w", err)
    }
}

The LoadConfiguration file loads all the Blockchain metadata and Mesh configuration.

The NewEthereumClient file creates a new service client, which leverages SDK functionalities, and implements a few gas related interfaces.

Valid Tokens

See (examples/tokenList.json) for a list of supported ERC20 tokens.

SDK Packages

Configuring the SDK

See the Configuration file for more information on how to configure the SDK.

SDK interfaces and method overriding

The SDK defines a list of Client interfaces, which allows the Mesh service to interact with a go-ethereum based blockchain.

The SDK provides a default implementation of the client module for a quick start. However, these interfaces require custom integration to override:

  1. GetBlockReceipts
  2. GetTransactionReceipt
  3. GetNativeTransferGasLimit

Development

Helpful commands for development:

Install dependencies

make deps

Run tests

make test

Lint the source code

make lint

Check for security concerns

make salus

Generate a coverage report

make coverage-local

Testing

To validate mesh-geth-sdk, install mesh-cli and run one of the following commands:

Read the How to Test your Mesh Implementation documentation for additional details.

Contributing

You may contribute to the mesh-geth-sdk project in various ways:

Read our Contributing documentation for more information.

You can also find community implementations for a variety of blockchains in the mesh-ecosystem repository.

Documentation

You can find the Mesh API documentation here.

Check out the Getting Started section to start diving into Mesh.

Related Projects

License

This project is available open source under the terms of the Apache 2.0 License.

© 2022 Coinbase