75 lines
3.0 KiB
ReStructuredText
75 lines
3.0 KiB
ReStructuredText
.. _build:
|
|
|
|
================
|
|
Build and Deploy
|
|
================
|
|
|
|
.. contents:: :local:
|
|
|
|
Setting up the environment
|
|
**************************
|
|
|
|
.. NOTE:: Plugeth is built on a fork of `Geth`_ and as such requires familiarity with `Go`_ and a funtional `environment`_ in which to build Go projects. Thankfully for everyone Go provides a compact and useful `tutorial`_ as well as a `space for practice`_.
|
|
|
|
PluGeth is an application built in three seperate repositories.
|
|
|
|
* `PluGeth`_
|
|
* `PluGethUtils`_
|
|
* `PluGethPlugins`_
|
|
|
|
Once all three are cloned into their own directories you are ready to begin. First we need to build geth though the PluGeth project. Navigate to ``plugeth/cmd/geth`` and run:
|
|
|
|
.. code-block:: shell
|
|
|
|
$ go get
|
|
|
|
This will download all dependencies needed for the project. This process will take a moment or two the first time through. Next run:
|
|
|
|
.. code-block:: shell
|
|
|
|
$ go build
|
|
|
|
Once this is complete you should see a ``.ethereum`` folder in your home directory.
|
|
|
|
At this point you are ready to start downloading local ethereum nodes. In order to do so, from ``plugeth/cmd/geth`` run:
|
|
|
|
.. code-block:: shell
|
|
|
|
$ ./geth
|
|
|
|
.. NOTE:: ``./geth`` is the primary command to build a *Mainnet* node. Building a mainnet node requires at least 8 GB RAM, 2 CPUs, and 350 GB of SSD disks. However, dozens of available flags will change the behavior of whichever network you choose to connect to. ``--help`` is your friend.
|
|
|
|
|
|
Build a plugin
|
|
**************
|
|
|
|
Navigate to ``plugethPlugins/packages/hello``. Inside you will see a ``main.go`` file. From this location run:
|
|
|
|
.. code-block:: shell
|
|
|
|
$ go build -buildmode=plugin
|
|
|
|
This will compile the plugin and produce a ``hello.so`` file. Move ``hello.so`` into ``~/.ethereum/plugins`` . In order to use this plugin geth will need to be started with a ``http.api=mymamespace`` flag. Additionally you will need to include a ``--http`` flag in order to access the standard json rpc methods.
|
|
|
|
Once geth has started you should see that the first ``INFO`` log reads: ``initialized hello`` . A new json rpc method, called hello, has been been appended to the list of available json rpc methods. In order to access this method you will need to ``curl`` into the network with this command:
|
|
|
|
.. code-block:: shell
|
|
|
|
$ curl 127.0.0.1:8545 -H "Content-Type: application/json" --data '{"jsonrpc":"2.0","method":"mynamespace_hello","params":[],"id":0}'
|
|
|
|
You should see that the network has responded with:
|
|
|
|
.. code-block:: shell
|
|
|
|
``{"jsonrpc":"2.0","id":0,"result":"Hello world"}``
|
|
|
|
Congradulations. You have just built and run your first Plugeth plugin.
|
|
|
|
.. _space for practice: https://tour.golang.org/welcome/1
|
|
.. _tutorial: https://tour.golang.org/welcome/1
|
|
.. _environment: https://golang.org/doc/code
|
|
.. _Go: https://golang.org/doc/
|
|
.. _Geth: https://geth.ethereum.org/
|
|
.. _PluGeth: https://github.com/openrelayxyz/plugeth
|
|
.. _PluGethUtils: https://github.com/openrelayxyz/plugeth-utils
|
|
.. _PluGethPlugins: https://github.com/openrelayxyz/plugeth-plugins |