Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 8 additions & 5 deletions constants/addresses.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,34 +11,40 @@ type Network string
const (
NetworkMainnet Network = "mainnet"
NetworkCalibration Network = "calibration"
NetworkDevnet Network = "devnet"
)

const (
ChainIDMainnet int64 = 314
ChainIDCalibration int64 = 314159
ChainIDDevnet int64 = 31415926
)

// static addresses not derived from FWSS
var (
Multicall3Addresses = map[Network]common.Address{
NetworkMainnet: common.HexToAddress("0xcA11bde05977b3631167028862bE2a173976CA11"),
NetworkCalibration: common.HexToAddress("0xcA11bde05977b3631167028862bE2a173976CA11"),
NetworkDevnet: common.HexToAddress("0x2e1F1424b41ad7b2E34b0a60501edFc82FEf5BE8"),
}

USDFCAddresses = map[Network]common.Address{
NetworkMainnet: common.HexToAddress("0x80B98d3aa09ffff255c3ba4A241111Ff1262F045"),
NetworkCalibration: common.HexToAddress("0xb3042734b608a1B16e9e86B374A3f3e389B4cDf0"),
NetworkDevnet: common.HexToAddress("0xB514FeE11119E0923950C09A181F1fa3aa62C80b"),
}
)

var RPCURLs = map[Network]string{
NetworkMainnet: "https://api.node.glif.io/rpc/v1",
NetworkCalibration: "https://api.calibration.node.glif.io/rpc/v1",
NetworkDevnet: "http://127.0.0.1:1234/rpc/v1",
}

var GenesisTimestamps = map[Network]int64{
NetworkMainnet: 1598306400,
NetworkCalibration: 1667326380,
// devnet genesis is dynamic per run -- omitted here, query the node
}

var GenesisTimestampsByChainID = map[int64]int64{
Expand All @@ -51,10 +57,10 @@ var USDFCAddressesByChainID = map[int64]common.Address{
ChainIDCalibration: common.HexToAddress("0xb3042734b608a1B16e9e86B374A3f3e389B4cDf0"),
}

// NetworkChainIDs maps network to expected chain ID
var NetworkChainIDs = map[Network]int64{
NetworkMainnet: ChainIDMainnet,
NetworkCalibration: ChainIDCalibration,
NetworkDevnet: ChainIDDevnet,
}

// ExpectedChainID returns the expected chain ID for a given network.
Expand All @@ -65,10 +71,7 @@ func ExpectedChainID(network Network) (int64, bool) {
}

// WarmStorageAddresses aliases the FWSS addresses (root of trust)
var WarmStorageAddresses = map[Network]common.Address{
NetworkMainnet: FWSSAddressMainnet,
NetworkCalibration: FWSSAddressCalibration,
}
// WarmStorageAddresses -- initialized in addresses_generated.go from FWSS root of trust vars

// GetPDPVerifierAddress returns the PDPVerifier contract address for the given network
func GetPDPVerifierAddress(network Network) common.Address {
Expand Down
15 changes: 14 additions & 1 deletion constants/addresses_generated.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

89 changes: 70 additions & 19 deletions internal/generate/addresses.go
Original file line number Diff line number Diff line change
Expand Up @@ -106,8 +106,14 @@ func readAddresses(ctx context.Context, rpcURL string, fwssAddr common.Address)
return addrs, nil
}

type templateData struct {
Mainnet *networkAddresses
Calibration *networkAddresses
Devnet *networkAddresses
}

var tmpl = template.Must(template.New("addresses").Parse(`// Code generated by go generate; DO NOT EDIT.
// Source: FWSS contracts on mainnet and calibration
// Source: FWSS contracts on mainnet, calibration{{ if .Devnet }}, and devnet{{ end }}

package constants

Expand All @@ -117,37 +123,74 @@ import "github.com/ethereum/go-ethereum/common"
var (
FWSSAddressMainnet = common.HexToAddress("{{ .Mainnet.FWSS.Hex }}")
FWSSAddressCalibration = common.HexToAddress("{{ .Calibration.FWSS.Hex }}")
{{- if .Devnet }}
FWSSAddressDevnet = common.HexToAddress("{{ .Devnet.FWSS.Hex }}")
{{- end }}
)

// WarmStorageAddresses aliases the FWSS addresses (root of trust)
var WarmStorageAddresses = map[Network]common.Address{
NetworkMainnet: FWSSAddressMainnet,
NetworkCalibration: FWSSAddressCalibration,
{{- if .Devnet }}
NetworkDevnet: FWSSAddressDevnet,
{{- end }}
}

// derived addresses - read from FWSS contracts
var (
PaymentsAddresses = map[Network]common.Address{
NetworkMainnet: common.HexToAddress("{{ .Mainnet.Payments.Hex }}"),
NetworkCalibration: common.HexToAddress("{{ .Calibration.Payments.Hex }}"),
{{- if .Devnet }}
NetworkDevnet: common.HexToAddress("{{ .Devnet.Payments.Hex }}"),
{{- end }}
}

WarmStorageStateViewAddresses = map[Network]common.Address{
NetworkMainnet: common.HexToAddress("{{ .Mainnet.StateView.Hex }}"),
NetworkCalibration: common.HexToAddress("{{ .Calibration.StateView.Hex }}"),
{{- if .Devnet }}
NetworkDevnet: common.HexToAddress("{{ .Devnet.StateView.Hex }}"),
{{- end }}
}

PDPVerifierAddresses = map[Network]common.Address{
NetworkMainnet: common.HexToAddress("{{ .Mainnet.PDPVerifier.Hex }}"),
NetworkCalibration: common.HexToAddress("{{ .Calibration.PDPVerifier.Hex }}"),
{{- if .Devnet }}
NetworkDevnet: common.HexToAddress("{{ .Devnet.PDPVerifier.Hex }}"),
{{- end }}
}

SPRegistryAddresses = map[Network]common.Address{
NetworkMainnet: common.HexToAddress("{{ .Mainnet.SPRegistry.Hex }}"),
NetworkCalibration: common.HexToAddress("{{ .Calibration.SPRegistry.Hex }}"),
{{- if .Devnet }}
NetworkDevnet: common.HexToAddress("{{ .Devnet.SPRegistry.Hex }}"),
{{- end }}
}

SessionKeyRegistryAddresses = map[Network]common.Address{
NetworkMainnet: common.HexToAddress("{{ .Mainnet.SessionKeyRegistry.Hex }}"),
NetworkCalibration: common.HexToAddress("{{ .Calibration.SessionKeyRegistry.Hex }}"),
{{- if .Devnet }}
NetworkDevnet: common.HexToAddress("{{ .Devnet.SessionKeyRegistry.Hex }}"),
{{- end }}
}
)
`))

func printAddresses(label string, addrs *networkAddresses) {
fmt.Printf("reading %s addresses...\n", label)
fmt.Printf(" fwss: %s\n", addrs.FWSS.Hex())
fmt.Printf(" payments: %s\n", addrs.Payments.Hex())
fmt.Printf(" stateview: %s\n", addrs.StateView.Hex())
fmt.Printf(" pdpverifier: %s\n", addrs.PDPVerifier.Hex())
fmt.Printf(" spregistry: %s\n", addrs.SPRegistry.Hex())
fmt.Printf(" sessionkey: %s\n", addrs.SessionKeyRegistry.Hex())
}

func main() {
ctx, cancel := context.WithTimeout(context.Background(), 60*time.Second)
defer cancel()
Expand All @@ -158,23 +201,37 @@ func main() {
fmt.Fprintf(os.Stderr, "mainnet: %v\n", err)
os.Exit(1)
}
fmt.Printf(" payments: %s\n", mainnet.Payments.Hex())
fmt.Printf(" stateview: %s\n", mainnet.StateView.Hex())
fmt.Printf(" pdpverifier: %s\n", mainnet.PDPVerifier.Hex())
fmt.Printf(" spregistry: %s\n", mainnet.SPRegistry.Hex())
fmt.Printf(" sessionkey: %s\n", mainnet.SessionKeyRegistry.Hex())
printAddresses("mainnet", mainnet)

fmt.Println("reading calibration addresses...")
calibration, err := readAddresses(ctx, rpcCalibration, fwssCalibration)
if err != nil {
fmt.Fprintf(os.Stderr, "calibration: %v\n", err)
os.Exit(1)
}
fmt.Printf(" payments: %s\n", calibration.Payments.Hex())
fmt.Printf(" stateview: %s\n", calibration.StateView.Hex())
fmt.Printf(" pdpverifier: %s\n", calibration.PDPVerifier.Hex())
fmt.Printf(" spregistry: %s\n", calibration.SPRegistry.Hex())
fmt.Printf(" sessionkey: %s\n", calibration.SessionKeyRegistry.Hex())
printAddresses("calibration", calibration)

data := templateData{
Mainnet: mainnet,
Calibration: calibration,
}

// optionally read devnet addresses from a running foc-devnet instance.
// set DEVNET_RPC and DEVNET_FWSS to enable, e.g.:
// DEVNET_RPC=http://127.0.0.1:1234/rpc/v1 DEVNET_FWSS=0x4A8a... go generate ./constants/
devnetRPC := os.Getenv("DEVNET_RPC")
devnetFWSS := os.Getenv("DEVNET_FWSS")
if devnetRPC != "" && devnetFWSS != "" {
fwssAddr := common.HexToAddress(devnetFWSS)
fmt.Println("reading devnet addresses...")
devnet, err := readAddresses(ctx, devnetRPC, fwssAddr)
if err != nil {
fmt.Fprintf(os.Stderr, "devnet: %v\n", err)
os.Exit(1)
}
printAddresses("devnet", devnet)
data.Devnet = devnet
}

// go generate runs in the package's source directory
// if GOPACKAGE is set, we're running via go generate - output to current dir
Expand All @@ -191,17 +248,11 @@ func main() {
}
defer f.Close()

err = tmpl.Execute(f, struct {
Mainnet *networkAddresses
Calibration *networkAddresses
}{
Mainnet: mainnet,
Calibration: calibration,
})
err = tmpl.Execute(f, data)
if err != nil {
fmt.Fprintf(os.Stderr, "execute template: %v\n", err)
os.Exit(1)
}

fmt.Println("wrote constants/addresses_generated.go")
fmt.Printf("wrote %s\n", outPath)
}
7 changes: 5 additions & 2 deletions network.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,10 @@ type Network = constants.Network
const (
NetworkMainnet = constants.NetworkMainnet
NetworkCalibration = constants.NetworkCalibration
NetworkDevnet = constants.NetworkDevnet
ChainIDMainnet = constants.ChainIDMainnet
ChainIDCalibration = constants.ChainIDCalibration
ChainIDDevnet = constants.ChainIDDevnet
)

var (
Expand Down Expand Up @@ -68,9 +70,10 @@ func NetworkFromChainID(chainID *big.Int) (Network, int64, error) {
return NetworkMainnet, id, nil
case ChainIDCalibration:
return NetworkCalibration, id, nil
case ChainIDDevnet:
return NetworkDevnet, id, nil
default:
return "", 0, fmt.Errorf("unsupported chain ID: %d (expected %d for mainnet or %d for calibration)",
id, ChainIDMainnet, ChainIDCalibration)
return "", 0, fmt.Errorf("unsupported chain ID: %d", id)
}
}

Expand Down
Loading