ethereum

package
v0.0.2-alpha Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 23, 2020 License: LGPL-3.0 Imports: 28 Imported by: 2

Documentation

Overview

Copyright 2020 ChainSafe Systems SPDX-License-Identifier: LGPL-3.0-only

The ethereum package contains the logic for interacting with ethereum chains.

There are 3 major components: the connection, the listener, and the writer. The currently supported transfer types are Fungible (ERC20), Non-Fungible (ERC721), and generic.

Connection

The connection contains the ethereum RPC client and can be accessed by both the writer and listener.

Listener

The listener polls for each new block and looks for deposit events in the bridge contract. If a deposit occurs, the listener will fetch additional information from the handler before constructing a message and forwarding it to the router.

Writer

The writer recieves the message and creates a proposals on-chain. Once a proposal is made, the writer then watches for a finalization event and will attempt to execute the proposal if a matching event occurs. The writer skips over any proposals it has already seen.

Index

Constants

View Source
const DefaultGasLimit = 6721975
View Source
const DefaultGasPrice = 20000000000
View Source
const ExecuteBlockWatchLimit = 100

Number of blocks to wait for an finalization event

View Source
const TxRetryInterval = time.Second * 2

Time between retrying a failed tx

View Source
const TxRetryLimit = 10

Maximum number of tx retries before exiting

Variables

View Source
var BaseAccounts = []string{
	"0x" + hex.EncodeToString(keystore.TestKeyRing.EthereumKeys[keystore.AliceKey].Encode()),
	"0x" + hex.EncodeToString(keystore.TestKeyRing.EthereumKeys[keystore.BobKey].Encode()),
	"0x" + hex.EncodeToString(keystore.TestKeyRing.EthereumKeys[keystore.CharlieKey].Encode()),
	"0x" + hex.EncodeToString(keystore.TestKeyRing.EthereumKeys[keystore.DaveKey].Encode()),
	"0x" + hex.EncodeToString(keystore.TestKeyRing.EthereumKeys[keystore.EveKey].Encode()),
}

The Private Keys of Alice, Bob, Etc

View Source
var BlockDelay = big.NewInt(10)
View Source
var BlockRetryInterval = time.Second * 5
View Source
var BlockRetryLimit = 5
View Source
var CancelledStatus uint8 = 4
View Source
var ErrFatalPolling = errors.New("listener block polling failed")
View Source
var ErrFatalQuery = errors.New("query of chain state failed")
View Source
var ErrFatalTx = errors.New("submission of transaction failed")
View Source
var ErrNonceTooLow = errors.New("nonce too low")
View Source
var ErrTxUnderpriced = errors.New("replacement transaction underpriced")
View Source
var PassedStatus uint8 = 2

https://github.com/ChainSafe/chainbridge-solidity/blob/b5ed13d9798feb7c340e737a726dd415b8815366/contracts/Bridge.sol#L20

View Source
var TransferredStatus uint8 = 3

Functions

func NewDeployArgs

func NewDeployArgs() *deployArgs

func NewListener

func NewListener(conn Connection, cfg *Config, log log15.Logger, bs blockstore.Blockstorer, stop <-chan int, sysErr chan<- error) *listener

NewListener creates and returns a listener

func NewWriter

func NewWriter(conn Connection, cfg *Config, log log15.Logger, stop <-chan int, sysErr chan<- error) *writer

NewWriter creates and returns writer

func RunGanache

func RunGanache(args *deployArgs) error

RunGanache takes an input string and the gopath and run ganache-cli with the given inputs

Types

type Chain

type Chain struct {
	// contains filtered or unexported fields
}

func InitializeChain

func InitializeChain(chainCfg *core.ChainConfig, logger log15.Logger, sysErr chan<- error) (*Chain, error)

func (*Chain) Id

func (c *Chain) Id() msg.ChainId

func (*Chain) Name

func (c *Chain) Name() string

func (*Chain) SetRouter

func (c *Chain) SetRouter(r *router.Router)

func (*Chain) Start

func (c *Chain) Start() error

func (*Chain) Stop

func (c *Chain) Stop()

Stop signals to any running routines to exit

type Config

type Config struct {
	// contains filtered or unexported fields
}

Config encapsulates all necessary parameters in ethereum compatible forms

type Connection

type Connection interface {
	Connect() error
	Keypair() *secp256k1.Keypair
	Opts() *bind.TransactOpts
	CallOpts() *bind.CallOpts
	LockAndUpdateNonce() error
	UnlockNonce()
	Client() *ethclient.Client
	EnsureHasBytecode(address common.Address) error
	LatestBlock() (*big.Int, error)
	WaitForBlock(block *big.Int) error
	Close()
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL