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
- Variables
- func NewDeployArgs() *deployArgs
- func NewListener(conn Connection, cfg *Config, log log15.Logger, bs blockstore.Blockstorer, ...) *listener
- func NewWriter(conn Connection, cfg *Config, log log15.Logger, stop <-chan int, ...) *writer
- func RunGanache(args *deployArgs) error
- type Chain
- type Config
- type Connection
Constants ¶
const DefaultGasLimit = 6721975
const DefaultGasPrice = 20000000000
const ExecuteBlockWatchLimit = 100
Number of blocks to wait for an finalization event
const TxRetryInterval = time.Second * 2
Time between retrying a failed tx
const TxRetryLimit = 10
Maximum number of tx retries before exiting
Variables ¶
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
var BlockDelay = big.NewInt(10)
var BlockRetryInterval = time.Second * 5
var BlockRetryLimit = 5
var CancelledStatus uint8 = 4
var ErrFatalPolling = errors.New("listener block polling failed")
var ErrFatalQuery = errors.New("query of chain state failed")
var ErrFatalTx = errors.New("submission of transaction failed")
var ErrNonceTooLow = errors.New("nonce too low")
var ErrTxUnderpriced = errors.New("replacement transaction underpriced")
var PassedStatus uint8 = 2
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 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() }