mirror of
https://github.com/OffchainLabs/prysm.git
synced 2026-01-09 15:37:56 -05:00
sharding: Package comments and responding to PR feedback
Former-commit-id: 970a229ed8d1cce8c5383a40e313092828c1be69 [formerly 0f30c11d3352946caccc1d325a0551f43dc8439c] Former-commit-id: 6ca7badf14c01fabf6a63db26214b6a0179aa8f2
This commit is contained in:
@@ -1,3 +1,6 @@
|
||||
// Package client provides an interface for interacting with a running ethereum full node.
|
||||
// As part of the initial phases of sharding, actors will need access to the sharding management
|
||||
// contract on the main PoW chain.
|
||||
package client
|
||||
|
||||
import (
|
||||
@@ -7,6 +10,7 @@ import (
|
||||
"fmt"
|
||||
"math/big"
|
||||
"os"
|
||||
"time"
|
||||
|
||||
ethereum "github.com/ethereum/go-ethereum"
|
||||
|
||||
@@ -17,8 +21,10 @@ import (
|
||||
"github.com/ethereum/go-ethereum/common"
|
||||
"github.com/ethereum/go-ethereum/core/types"
|
||||
"github.com/ethereum/go-ethereum/ethclient"
|
||||
"github.com/ethereum/go-ethereum/log"
|
||||
"github.com/ethereum/go-ethereum/node"
|
||||
"github.com/ethereum/go-ethereum/rpc"
|
||||
"github.com/ethereum/go-ethereum/sharding"
|
||||
"github.com/ethereum/go-ethereum/sharding/contracts"
|
||||
cli "gopkg.in/urfave/cli.v1"
|
||||
)
|
||||
@@ -27,7 +33,7 @@ const (
|
||||
clientIdentifier = "geth" // Used to determine the ipc name.
|
||||
)
|
||||
|
||||
// General Client for Collator. Communicates to Geth node via JSON RPC.
|
||||
// General client for Collator/Proposer. Communicates to Geth node via JSON RPC.
|
||||
|
||||
type shardingClient struct {
|
||||
endpoint string // Endpoint to JSON RPC
|
||||
@@ -189,3 +195,45 @@ func dialRPC(endpoint string) (*rpc.Client, error) {
|
||||
}
|
||||
return rpc.Dial(endpoint)
|
||||
}
|
||||
|
||||
// initSMC initializes the sharding manager contract bindings.
|
||||
// If the SMC does not exist, it will be deployed.
|
||||
func initSMC(c *shardingClient) (*contracts.SMC, error) {
|
||||
b, err := c.client.CodeAt(context.Background(), sharding.ShardingManagerAddress, nil)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("unable to get contract code at %s: %v", sharding.ShardingManagerAddress, err)
|
||||
}
|
||||
|
||||
// Deploy SMC for development only.
|
||||
// TODO: Separate contract deployment from the sharding client. It would only need to be deployed
|
||||
// once on the mainnet, so this code would not need to ship with the client.
|
||||
if len(b) == 0 {
|
||||
log.Info(fmt.Sprintf("No sharding manager contract found at %s. Deploying new contract.", sharding.ShardingManagerAddress.String()))
|
||||
|
||||
txOps, err := c.CreateTXOps(big.NewInt(0))
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("unable to intiate the transaction: %v", err)
|
||||
}
|
||||
|
||||
addr, tx, contract, err := contracts.DeploySMC(txOps, c.client)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("unable to deploy sharding manager contract: %v", err)
|
||||
}
|
||||
|
||||
for pending := true; pending; _, pending, err = c.client.TransactionByHash(context.Background(), tx.Hash()) {
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("unable to get transaction by hash: %v", err)
|
||||
}
|
||||
time.Sleep(1 * time.Second)
|
||||
}
|
||||
|
||||
log.Info(fmt.Sprintf("New contract deployed at %s", addr.String()))
|
||||
return contract, nil
|
||||
}
|
||||
|
||||
contract, err := contracts.NewSMC(sharding.ShardingManagerAddress, c.client)
|
||||
if err != nil {
|
||||
|
||||
}
|
||||
return contract, nil
|
||||
}
|
||||
|
||||
@@ -1,54 +0,0 @@
|
||||
package client
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"math/big"
|
||||
"time"
|
||||
|
||||
"github.com/ethereum/go-ethereum/log"
|
||||
"github.com/ethereum/go-ethereum/sharding"
|
||||
"github.com/ethereum/go-ethereum/sharding/contracts"
|
||||
)
|
||||
|
||||
// initSMC initializes the sharding manager contract bindings.
|
||||
// If the SMC does not exist, it will be deployed.
|
||||
func initSMC(c *shardingClient) (*contracts.SMC, error) {
|
||||
b, err := c.client.CodeAt(context.Background(), sharding.ShardingManagerAddress, nil)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("unable to get contract code at %s: %v", sharding.ShardingManagerAddress, err)
|
||||
}
|
||||
|
||||
// Deploy SMC for development only.
|
||||
// TODO: Separate contract deployment from the sharding client. It would only need to be deployed
|
||||
// once on the mainnet, so this code would not need to ship with the client.
|
||||
if len(b) == 0 {
|
||||
log.Info(fmt.Sprintf("No sharding manager contract found at %s. Deploying new contract.", sharding.ShardingManagerAddress.String()))
|
||||
|
||||
txOps, err := c.CreateTXOps(big.NewInt(0))
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("unable to intiate the transaction: %v", err)
|
||||
}
|
||||
|
||||
addr, tx, contract, err := contracts.DeploySMC(txOps, c.client)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("unable to deploy sharding manager contract: %v", err)
|
||||
}
|
||||
|
||||
for pending := true; pending; _, pending, err = c.client.TransactionByHash(context.Background(), tx.Hash()) {
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("unable to get transaction by hash: %v", err)
|
||||
}
|
||||
time.Sleep(1 * time.Second)
|
||||
}
|
||||
|
||||
log.Info(fmt.Sprintf("New contract deployed at %s", addr.String()))
|
||||
return contract, nil
|
||||
}
|
||||
|
||||
contract, err := contracts.NewSMC(sharding.ShardingManagerAddress, c.client)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to create sharding contract: %v", err)
|
||||
}
|
||||
return contract, nil
|
||||
}
|
||||
@@ -8,6 +8,7 @@ import (
|
||||
"github.com/ethereum/go-ethereum/accounts/abi/bind"
|
||||
"github.com/ethereum/go-ethereum/core/types"
|
||||
"github.com/ethereum/go-ethereum/log"
|
||||
"github.com/ethereum/go-ethereum/params"
|
||||
"github.com/ethereum/go-ethereum/sharding"
|
||||
"github.com/ethereum/go-ethereum/sharding/client"
|
||||
)
|
||||
@@ -120,3 +121,22 @@ func submitCollation(shardID int64) error {
|
||||
log.Info("Submit collation function called")
|
||||
return nil
|
||||
}
|
||||
|
||||
// joinCollatorPool checks if the account is a collator in the SMC. If
|
||||
// the account is not in the set, it will deposit 100ETH into contract.
|
||||
func joinCollatorPool(c client.Client) error {
|
||||
|
||||
log.Info("Joining collator pool")
|
||||
txOps, err := c.CreateTXOps(sharding.DepositSize)
|
||||
if err != nil {
|
||||
return fmt.Errorf("unable to intiate the deposit transaction: %v", err)
|
||||
}
|
||||
|
||||
tx, err := c.SMCTransactor().Deposit(txOps)
|
||||
if err != nil {
|
||||
return fmt.Errorf("unable to deposit eth and become a collator: %v", err)
|
||||
}
|
||||
log.Info(fmt.Sprintf("Deposited %dETH into contract with transaction hash: %s", new(big.Int).Div(sharding.DepositSize, big.NewInt(params.Ether)), tx.Hash().String()))
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
// Package collator holds all of the functionality to run as a collator in a sharded system.
|
||||
package collator
|
||||
|
||||
import (
|
||||
@@ -6,7 +7,9 @@ import (
|
||||
cli "gopkg.in/urfave/cli.v1"
|
||||
)
|
||||
|
||||
// Collator runnable client.
|
||||
type Collator interface {
|
||||
// Start the main routine for a collator.
|
||||
Start() error
|
||||
}
|
||||
|
||||
|
||||
@@ -1,30 +0,0 @@
|
||||
package collator
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"math/big"
|
||||
|
||||
"github.com/ethereum/go-ethereum/log"
|
||||
"github.com/ethereum/go-ethereum/params"
|
||||
"github.com/ethereum/go-ethereum/sharding"
|
||||
"github.com/ethereum/go-ethereum/sharding/client"
|
||||
)
|
||||
|
||||
// joinCollatorPool checks if the account is a collator in the SMC. If
|
||||
// the account is not in the set, it will deposit 100ETH into contract.
|
||||
func joinCollatorPool(c client.Client) error {
|
||||
|
||||
log.Info("Joining collator pool")
|
||||
txOps, err := c.CreateTXOps(sharding.DepositSize)
|
||||
if err != nil {
|
||||
return fmt.Errorf("unable to intiate the deposit transaction: %v", err)
|
||||
}
|
||||
|
||||
tx, err := c.SMCTransactor().Deposit(txOps)
|
||||
if err != nil {
|
||||
return fmt.Errorf("unable to deposit eth and become a collator: %v", err)
|
||||
}
|
||||
log.Info(fmt.Sprintf("Deposited %dETH into contract with transaction hash: %s", new(big.Int).Div(sharding.DepositSize, big.NewInt(params.Ether)), tx.Hash().String()))
|
||||
|
||||
return nil
|
||||
}
|
||||
5
sharding/contracts/contracts.go
Normal file
5
sharding/contracts/contracts.go
Normal file
@@ -0,0 +1,5 @@
|
||||
// Package contracts consists of generated contracts for sharding.
|
||||
package contracts
|
||||
|
||||
// DO NOT USE THIS FILE: It exists only for the package comment. Other files in this package are
|
||||
// automatically generated and cannot have a package comment.
|
||||
@@ -1,3 +1,5 @@
|
||||
// Package proposer holds all of the functionality to run as a collation proposer in a sharded
|
||||
// system.
|
||||
package proposer
|
||||
|
||||
import (
|
||||
|
||||
Reference in New Issue
Block a user