depositcontract

package
v1.0.0-alpha.3 Latest Latest
Warning

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

Go to latest
Published: Apr 17, 2020 License: GPL-3.0 Imports: 15 Imported by: 0

README

Deposit Contract

A validator will deposit 32 ETH to the deposit contract. The contract will generate a log showing the validator as a qualified validator. The deposit is considered to be burned. As you burn the 32 ETH to participate, the beacon chain will see it and will credit the validator with the validator bond, At some point in the future, after a hard fork, the original deposit + interest can be withdrawn back on one of the shards.
To call the registration function, it takes arguments of pubkey, proof_of_possession, withdrawal_credentials. If the user wants to deposit more than DEPOSIT_SIZE ETH, they would need to make multiple deposit calls.
When the contract publishes the ChainStart log, beacon nodes will start off the beacon chain with slot 0 and last recorded block.timestamp as beacon chain genesis time. The registration contract generate logs with the various arguments for consumption by beacon nodes. It does not validate proof_of_possession and withdrawal_credentials, pushing the validation logic to the beacon chain.

How to generate bindings for vyper contract

This requires that you have vyper and abigen installed in your local machine. Vyper: https://github.com/ethereum/vyper Abigen: https://github.com/ethereum/go-ethereum/tree/master/cmd/abigen

To generate the abi using the vyper compiler, you can use


docker run -v $(pwd):/code ethereum/vyper:0.1.0b12  -f abi /code/depositContract.v.py > abi.json

Then the abi will be outputted and you can save it in abi.json in the folder.

To generate the bytecode you can then use


docker run -v $(pwd):/code ethereum/vyper:0.1.0b12 /code/depositContract.v.py > bytecode.bin

and save the bytecode in bytecode.bin in the folder. Now with both the abi and bytecode we can generate the go bindings.


bazel run @com_github_ethereum_go_ethereum//cmd/abigen -- -bin $(pwd)/bytecode.bin -abi $(pwd)/abi.json -out $(pwd)/depositContract.go --pkg depositcontract --type DepositContract

How to execute tests

bazel test //contracts/deposit-contract:go_default_test

Run with -v option for detailed log output

bazel test //contracts/deposit-contract:go_default_test --test_arg=-test.v --test_output=streamed 
=== RUN   TestSetupRegistrationContract_OK
--- PASS: TestSetupRegistrationContract_OK (0.07s)
=== RUN   TestRegister_Below1ETH
--- PASS: TestRegister_Below1ETH (0.02s)
=== RUN   TestRegister_Above32Eth
--- PASS: TestRegister_Above32Eth (0.02s)
=== RUN   TestValidatorRegister_OK
--- PASS: TestValidatorRegister_OK (0.08s)
=== RUN   TestDrain
--- PASS: TestDrain (0.04s)
PASS
ok      contracts/deposit-contract        0.633s

Documentation

Index

Constants

View Source
const DepositContractABI = "" /* 1491-byte string literal not displayed */

DepositContractABI is the input ABI used to generate the binding from.

Variables

View Source
var DepositContractBin = "" /* 9448-byte string literal not displayed */

DepositContractBin is the compiled bytecode used for deploying new contracts.

Functions

func Amount32Eth

func Amount32Eth() *big.Int

Amount32Eth returns 32Eth(in wei) in terms of the big.Int type.

func LessThan1Eth

func LessThan1Eth() *big.Int

LessThan1Eth returns less than 1 Eth(in wei) in terms of the big.Int type.

func UnpackDepositLogData

func UnpackDepositLogData(data []byte) (pubkey []byte, withdrawalCredentials []byte, amount []byte,
	signature []byte, index []byte, err error)

UnpackDepositLogData unpacks the data from a deposit log using the ABI decoder.

Types

type DepositContract

type DepositContract struct {
	DepositContractCaller     // Read-only binding to the contract
	DepositContractTransactor // Write-only binding to the contract
	DepositContractFilterer   // Log filterer for contract events
}

DepositContract is an auto generated Go binding around an Ethereum contract.

func DeployDepositContract

func DeployDepositContract(auth *bind.TransactOpts, backend bind.ContractBackend, _drain_address common.Address) (common.Address, *types.Transaction, *DepositContract, error)

DeployDepositContract deploys a new Ethereum contract, binding an instance of DepositContract to it.

func NewDepositContract

func NewDepositContract(address common.Address, backend bind.ContractBackend) (*DepositContract, error)

NewDepositContract creates a new instance of DepositContract, bound to a specific deployed contract.

type DepositContractCaller

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

DepositContractCaller is an auto generated read-only Go binding around an Ethereum contract.

func NewDepositContractCaller

func NewDepositContractCaller(address common.Address, caller bind.ContractCaller) (*DepositContractCaller, error)

NewDepositContractCaller creates a new read-only instance of DepositContract, bound to a specific deployed contract.

func (*DepositContractCaller) DrainAddress

func (_DepositContract *DepositContractCaller) DrainAddress(opts *bind.CallOpts) (common.Address, error)

DrainAddress is a free data retrieval call binding the contract method 0x8ba35cdf.

Solidity: function drain_address() constant returns(address out)

func (*DepositContractCaller) GetDepositCount

func (_DepositContract *DepositContractCaller) GetDepositCount(opts *bind.CallOpts) ([]byte, error)

GetDepositCount is a free data retrieval call binding the contract method 0x621fd130.

Solidity: function get_deposit_count() constant returns(bytes out)

func (*DepositContractCaller) GetDepositRoot added in v0.2.3

func (_DepositContract *DepositContractCaller) GetDepositRoot(opts *bind.CallOpts) ([32]byte, error)

GetDepositRoot is a free data retrieval call binding the contract method 0xc5f2892f.

Solidity: function get_deposit_root() constant returns(bytes32 out)

type DepositContractCallerRaw

type DepositContractCallerRaw struct {
	Contract *DepositContractCaller // Generic read-only contract binding to access the raw methods on
}

DepositContractCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.

func (*DepositContractCallerRaw) Call

func (_DepositContract *DepositContractCallerRaw) Call(opts *bind.CallOpts, result interface{}, method string, params ...interface{}) error

Call invokes the (constant) contract method with params as input values and sets the output to result. The result type might be a single field for simple returns, a slice of interfaces for anonymous returns and a struct for named returns.

type DepositContractCallerSession

type DepositContractCallerSession struct {
	Contract *DepositContractCaller // Generic contract caller binding to set the session for
	CallOpts bind.CallOpts          // Call options to use throughout this session
}

DepositContractCallerSession is an auto generated read-only Go binding around an Ethereum contract, with pre-set call options.

func (*DepositContractCallerSession) DrainAddress

func (_DepositContract *DepositContractCallerSession) DrainAddress() (common.Address, error)

DrainAddress is a free data retrieval call binding the contract method 0x8ba35cdf.

Solidity: function drain_address() constant returns(address out)

func (*DepositContractCallerSession) GetDepositCount

func (_DepositContract *DepositContractCallerSession) GetDepositCount() ([]byte, error)

GetDepositCount is a free data retrieval call binding the contract method 0x621fd130.

Solidity: function get_deposit_count() constant returns(bytes out)

func (*DepositContractCallerSession) GetDepositRoot added in v0.2.3

func (_DepositContract *DepositContractCallerSession) GetDepositRoot() ([32]byte, error)

GetDepositRoot is a free data retrieval call binding the contract method 0xc5f2892f.

Solidity: function get_deposit_root() constant returns(bytes32 out)

type DepositContractDepositEvent

type DepositContractDepositEvent struct {
	Pubkey                []byte
	WithdrawalCredentials []byte
	Amount                []byte
	Signature             []byte
	Index                 []byte
	Raw                   types.Log // Blockchain specific contextual infos
}

DepositContractDepositEvent represents a DepositEvent event raised by the DepositContract contract.

type DepositContractDepositEventIterator

type DepositContractDepositEventIterator struct {
	Event *DepositContractDepositEvent // Event containing the contract specifics and raw log
	// contains filtered or unexported fields
}

DepositContractDepositEventIterator is returned from FilterDepositEvent and is used to iterate over the raw logs and unpacked data for DepositEvent events raised by the DepositContract contract.

func (*DepositContractDepositEventIterator) Close

Close terminates the iteration process, releasing any pending underlying resources.

func (*DepositContractDepositEventIterator) Error

Error returns any retrieval or parsing error occurred during filtering.

func (*DepositContractDepositEventIterator) Next

Next advances the iterator to the subsequent event, returning whether there are any more events found. In case of a retrieval or parsing error, false is returned and Error() can be queried for the exact failure.

type DepositContractFilterer

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

DepositContractFilterer is an auto generated log filtering Go binding around an Ethereum contract events.

func NewDepositContractFilterer

func NewDepositContractFilterer(address common.Address, filterer bind.ContractFilterer) (*DepositContractFilterer, error)

NewDepositContractFilterer creates a new log filterer instance of DepositContract, bound to a specific deployed contract.

func (*DepositContractFilterer) FilterDepositEvent

func (_DepositContract *DepositContractFilterer) FilterDepositEvent(opts *bind.FilterOpts) (*DepositContractDepositEventIterator, error)

FilterDepositEvent is a free log retrieval operation binding the contract event 0x649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c5.

Solidity: event DepositEvent(bytes pubkey, bytes withdrawal_credentials, bytes amount, bytes signature, bytes index)

func (*DepositContractFilterer) ParseDepositEvent added in v0.2.3

func (_DepositContract *DepositContractFilterer) ParseDepositEvent(log types.Log) (*DepositContractDepositEvent, error)

ParseDepositEvent is a log parse operation binding the contract event 0x649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c5.

Solidity: event DepositEvent(bytes pubkey, bytes withdrawal_credentials, bytes amount, bytes signature, bytes index)

func (*DepositContractFilterer) WatchDepositEvent

func (_DepositContract *DepositContractFilterer) WatchDepositEvent(opts *bind.WatchOpts, sink chan<- *DepositContractDepositEvent) (event.Subscription, error)

WatchDepositEvent is a free log subscription operation binding the contract event 0x649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c5.

Solidity: event DepositEvent(bytes pubkey, bytes withdrawal_credentials, bytes amount, bytes signature, bytes index)

type DepositContractRaw

type DepositContractRaw struct {
	Contract *DepositContract // Generic contract binding to access the raw methods on
}

DepositContractRaw is an auto generated low-level Go binding around an Ethereum contract.

func (*DepositContractRaw) Call

func (_DepositContract *DepositContractRaw) Call(opts *bind.CallOpts, result interface{}, method string, params ...interface{}) error

Call invokes the (constant) contract method with params as input values and sets the output to result. The result type might be a single field for simple returns, a slice of interfaces for anonymous returns and a struct for named returns.

func (*DepositContractRaw) Transact

func (_DepositContract *DepositContractRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error)

Transact invokes the (paid) contract method with params as input values.

func (*DepositContractRaw) Transfer

func (_DepositContract *DepositContractRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error)

Transfer initiates a plain transaction to move funds to the contract, calling its default method if one is available.

type DepositContractSession

type DepositContractSession struct {
	Contract     *DepositContract  // Generic contract binding to set the session for
	CallOpts     bind.CallOpts     // Call options to use throughout this session
	TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session
}

DepositContractSession is an auto generated Go binding around an Ethereum contract, with pre-set call and transact options.

func (*DepositContractSession) Deposit

func (_DepositContract *DepositContractSession) Deposit(pubkey []byte, withdrawal_credentials []byte, signature []byte, deposit_data_root [32]byte) (*types.Transaction, error)

Deposit is a paid mutator transaction binding the contract method 0x22895118.

Solidity: function deposit(bytes pubkey, bytes withdrawal_credentials, bytes signature, bytes32 deposit_data_root) returns()

func (*DepositContractSession) Drain

func (_DepositContract *DepositContractSession) Drain() (*types.Transaction, error)

Drain is a paid mutator transaction binding the contract method 0x9890220b.

Solidity: function drain() returns()

func (*DepositContractSession) DrainAddress

func (_DepositContract *DepositContractSession) DrainAddress() (common.Address, error)

DrainAddress is a free data retrieval call binding the contract method 0x8ba35cdf.

Solidity: function drain_address() constant returns(address out)

func (*DepositContractSession) GetDepositCount

func (_DepositContract *DepositContractSession) GetDepositCount() ([]byte, error)

GetDepositCount is a free data retrieval call binding the contract method 0x621fd130.

Solidity: function get_deposit_count() constant returns(bytes out)

func (*DepositContractSession) GetDepositRoot added in v0.2.3

func (_DepositContract *DepositContractSession) GetDepositRoot() ([32]byte, error)

GetDepositRoot is a free data retrieval call binding the contract method 0xc5f2892f.

Solidity: function get_deposit_root() constant returns(bytes32 out)

type DepositContractTransactor

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

DepositContractTransactor is an auto generated write-only Go binding around an Ethereum contract.

func NewDepositContractTransactor

func NewDepositContractTransactor(address common.Address, transactor bind.ContractTransactor) (*DepositContractTransactor, error)

NewDepositContractTransactor creates a new write-only instance of DepositContract, bound to a specific deployed contract.

func (*DepositContractTransactor) Deposit

func (_DepositContract *DepositContractTransactor) Deposit(opts *bind.TransactOpts, pubkey []byte, withdrawal_credentials []byte, signature []byte, deposit_data_root [32]byte) (*types.Transaction, error)

Deposit is a paid mutator transaction binding the contract method 0x22895118.

Solidity: function deposit(bytes pubkey, bytes withdrawal_credentials, bytes signature, bytes32 deposit_data_root) returns()

func (*DepositContractTransactor) Drain

func (_DepositContract *DepositContractTransactor) Drain(opts *bind.TransactOpts) (*types.Transaction, error)

Drain is a paid mutator transaction binding the contract method 0x9890220b.

Solidity: function drain() returns()

type DepositContractTransactorRaw

type DepositContractTransactorRaw struct {
	Contract *DepositContractTransactor // Generic write-only contract binding to access the raw methods on
}

DepositContractTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.

func (*DepositContractTransactorRaw) Transact

func (_DepositContract *DepositContractTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error)

Transact invokes the (paid) contract method with params as input values.

func (*DepositContractTransactorRaw) Transfer

func (_DepositContract *DepositContractTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error)

Transfer initiates a plain transaction to move funds to the contract, calling its default method if one is available.

type DepositContractTransactorSession

type DepositContractTransactorSession struct {
	Contract     *DepositContractTransactor // Generic contract transactor binding to set the session for
	TransactOpts bind.TransactOpts          // Transaction auth options to use throughout this session
}

DepositContractTransactorSession is an auto generated write-only Go binding around an Ethereum contract, with pre-set transact options.

func (*DepositContractTransactorSession) Deposit

func (_DepositContract *DepositContractTransactorSession) Deposit(pubkey []byte, withdrawal_credentials []byte, signature []byte, deposit_data_root [32]byte) (*types.Transaction, error)

Deposit is a paid mutator transaction binding the contract method 0x22895118.

Solidity: function deposit(bytes pubkey, bytes withdrawal_credentials, bytes signature, bytes32 deposit_data_root) returns()

func (*DepositContractTransactorSession) Drain

func (_DepositContract *DepositContractTransactorSession) Drain() (*types.Transaction, error)

Drain is a paid mutator transaction binding the contract method 0x9890220b.

Solidity: function drain() returns()

type TestAccount

type TestAccount struct {
	Addr         common.Address
	ContractAddr common.Address
	Contract     *DepositContract
	Backend      *backends.SimulatedBackend
	TxOpts       *bind.TransactOpts
}

TestAccount represents a test account in the simulated backend, through which we can perform actions on the eth1.0 chain.

func Setup

func Setup() (*TestAccount, error)

Setup creates the simulated backend with the deposit contract deployed

Jump to

Keyboard shortcuts

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