diff --git a/cmd/geth/chaincmd.go b/cmd/geth/chaincmd.go index afb2ca0677..62da0885d1 100644 --- a/cmd/geth/chaincmd.go +++ b/cmd/geth/chaincmd.go @@ -70,6 +70,7 @@ It expects the genesis file as argument.`, utils.SepoliaFlag, utils.RinkebyFlag, utils.GoerliFlag, + utils.ScrollAlphaFlag, }, Category: "BLOCKCHAIN COMMANDS", Description: ` diff --git a/cmd/geth/consolecmd.go b/cmd/geth/consolecmd.go index 95cc0b69dd..86d772f942 100644 --- a/cmd/geth/consolecmd.go +++ b/cmd/geth/consolecmd.go @@ -137,6 +137,8 @@ func remoteConsole(ctx *cli.Context) error { path = filepath.Join(path, "goerli") } else if ctx.GlobalBool(utils.SepoliaFlag.Name) { path = filepath.Join(path, "sepolia") + } else if ctx.GlobalBool(utils.ScrollAlphaFlag.Name) { + path = filepath.Join(path, "scroll-alpha") } } endpoint = fmt.Sprintf("%s/geth.ipc", path) diff --git a/cmd/geth/dbcmd.go b/cmd/geth/dbcmd.go index c8e08e2856..0641823ddc 100644 --- a/cmd/geth/dbcmd.go +++ b/cmd/geth/dbcmd.go @@ -85,6 +85,7 @@ Remove blockchain and state databases`, utils.SepoliaFlag, utils.RinkebyFlag, utils.GoerliFlag, + utils.ScrollAlphaFlag, }, Usage: "Inspect the storage size for each type of data in the database", Description: `This commands iterates the entire database. If the optional 'prefix' and 'start' arguments are provided, then the iteration is limited to the given subset of data.`, @@ -101,6 +102,7 @@ Remove blockchain and state databases`, utils.SepoliaFlag, utils.RinkebyFlag, utils.GoerliFlag, + utils.ScrollAlphaFlag, }, } dbCompactCmd = cli.Command{ @@ -115,6 +117,7 @@ Remove blockchain and state databases`, utils.SepoliaFlag, utils.RinkebyFlag, utils.GoerliFlag, + utils.ScrollAlphaFlag, utils.CacheFlag, utils.CacheDatabaseFlag, }, @@ -135,6 +138,7 @@ corruption if it is aborted during execution'!`, utils.SepoliaFlag, utils.RinkebyFlag, utils.GoerliFlag, + utils.ScrollAlphaFlag, }, Description: "This command looks up the specified database key from the database.", } @@ -151,6 +155,7 @@ corruption if it is aborted during execution'!`, utils.SepoliaFlag, utils.RinkebyFlag, utils.GoerliFlag, + utils.ScrollAlphaFlag, }, Description: `This command deletes the specified database key from the database. WARNING: This is a low-level operation which may cause database corruption!`, @@ -168,6 +173,7 @@ WARNING: This is a low-level operation which may cause database corruption!`, utils.SepoliaFlag, utils.RinkebyFlag, utils.GoerliFlag, + utils.ScrollAlphaFlag, }, Description: `This command sets a given database key to the given value. WARNING: This is a low-level operation which may cause database corruption!`, @@ -185,6 +191,7 @@ WARNING: This is a low-level operation which may cause database corruption!`, utils.SepoliaFlag, utils.RinkebyFlag, utils.GoerliFlag, + utils.ScrollAlphaFlag, }, Description: "This command looks up the specified database key from the database.", } @@ -201,6 +208,7 @@ WARNING: This is a low-level operation which may cause database corruption!`, utils.SepoliaFlag, utils.RinkebyFlag, utils.GoerliFlag, + utils.ScrollAlphaFlag, }, Description: "This command displays information about the freezer index.", } @@ -216,6 +224,7 @@ WARNING: This is a low-level operation which may cause database corruption!`, utils.RopstenFlag, utils.RinkebyFlag, utils.GoerliFlag, + utils.ScrollAlphaFlag, }, Description: "The import command imports the specific chain data from an RLP encoded stream.", } @@ -231,6 +240,7 @@ WARNING: This is a low-level operation which may cause database corruption!`, utils.RopstenFlag, utils.RinkebyFlag, utils.GoerliFlag, + utils.ScrollAlphaFlag, }, Description: "Exports the specified chain data to an RLP encoded stream, optionally gzip-compressed.", } diff --git a/cmd/geth/main.go b/cmd/geth/main.go index 6a823b01ee..3b121be80e 100644 --- a/cmd/geth/main.go +++ b/cmd/geth/main.go @@ -145,6 +145,7 @@ var ( utils.SepoliaFlag, utils.RinkebyFlag, utils.GoerliFlag, + utils.ScrollAlphaFlag, utils.VMEnableDebugFlag, utils.NetworkIdFlag, utils.EthStatsURLFlag, @@ -279,6 +280,9 @@ func prepare(ctx *cli.Context) { case ctx.GlobalIsSet(utils.GoerliFlag.Name): log.Info("Starting Geth on Görli testnet...") + case ctx.GlobalIsSet(utils.ScrollAlphaFlag.Name): + log.Info("Starting l2geth on Scroll Alpha testnet...") + case ctx.GlobalIsSet(utils.DeveloperFlag.Name): log.Info("Starting Geth in ephemeral dev mode...") @@ -288,7 +292,7 @@ func prepare(ctx *cli.Context) { // If we're a full node on mainnet without --cache specified, bump default cache allowance if ctx.GlobalString(utils.SyncModeFlag.Name) != "light" && !ctx.GlobalIsSet(utils.CacheFlag.Name) && !ctx.GlobalIsSet(utils.NetworkIdFlag.Name) { // Make sure we're not on any supported preconfigured testnet either - if !ctx.GlobalIsSet(utils.RopstenFlag.Name) && !ctx.GlobalIsSet(utils.RinkebyFlag.Name) && !ctx.GlobalIsSet(utils.GoerliFlag.Name) && !ctx.GlobalIsSet(utils.DeveloperFlag.Name) { + if !ctx.GlobalIsSet(utils.RopstenFlag.Name) && !ctx.GlobalIsSet(utils.RinkebyFlag.Name) && !ctx.GlobalIsSet(utils.GoerliFlag.Name) && !ctx.GlobalIsSet(utils.ScrollAlphaFlag.Name) && !ctx.GlobalIsSet(utils.DeveloperFlag.Name) { // Nope, we're really on mainnet. Bump that cache up! log.Info("Bumping default cache on mainnet", "provided", ctx.GlobalInt(utils.CacheFlag.Name), "updated", 4096) ctx.GlobalSet(utils.CacheFlag.Name, strconv.Itoa(4096)) diff --git a/cmd/geth/snapshot.go b/cmd/geth/snapshot.go index 4af78a36d3..f10da423fc 100644 --- a/cmd/geth/snapshot.go +++ b/cmd/geth/snapshot.go @@ -66,6 +66,7 @@ var ( utils.SepoliaFlag, utils.RinkebyFlag, utils.GoerliFlag, + utils.ScrollAlphaFlag, utils.CacheTrieJournalFlag, utils.BloomFilterSizeFlag, }, @@ -97,6 +98,7 @@ the trie clean cache with default directory will be deleted. utils.SepoliaFlag, utils.RinkebyFlag, utils.GoerliFlag, + utils.ScrollAlphaFlag, }, Description: ` geth snapshot verify-state @@ -118,6 +120,7 @@ In other words, this command does the snapshot to trie conversion. utils.SepoliaFlag, utils.RinkebyFlag, utils.GoerliFlag, + utils.ScrollAlphaFlag, }, Description: ` geth snapshot traverse-state @@ -141,6 +144,7 @@ It's also usable without snapshot enabled. utils.SepoliaFlag, utils.RinkebyFlag, utils.GoerliFlag, + utils.ScrollAlphaFlag, }, Description: ` geth snapshot traverse-rawstate @@ -165,6 +169,7 @@ It's also usable without snapshot enabled. utils.SepoliaFlag, utils.RinkebyFlag, utils.GoerliFlag, + utils.ScrollAlphaFlag, utils.ExcludeCodeFlag, utils.ExcludeStorageFlag, utils.StartKeyFlag, diff --git a/cmd/geth/usage.go b/cmd/geth/usage.go index 804eccd0cb..197e2f5f08 100644 --- a/cmd/geth/usage.go +++ b/cmd/geth/usage.go @@ -47,6 +47,7 @@ var AppHelpFlagGroups = []flags.FlagGroup{ utils.RinkebyFlag, utils.RopstenFlag, utils.SepoliaFlag, + utils.ScrollAlphaFlag, utils.SyncModeFlag, utils.ExitWhenSyncedFlag, utils.GCModeFlag, diff --git a/cmd/utils/flags.go b/cmd/utils/flags.go index 8ebe731638..161b710405 100644 --- a/cmd/utils/flags.go +++ b/cmd/utils/flags.go @@ -160,6 +160,10 @@ var ( Name: "sepolia", Usage: "Sepolia network: pre-configured proof-of-work test network", } + ScrollAlphaFlag = cli.BoolFlag{ + Name: "scroll-alpha", + Usage: "Scroll Alpha test network", + } DeveloperFlag = cli.BoolFlag{ Name: "dev", Usage: "Ephemeral proof-of-authority network with a pre-funded developer account, mining enabled", @@ -811,6 +815,9 @@ func MakeDataDir(ctx *cli.Context) string { if ctx.GlobalBool(SepoliaFlag.Name) { return filepath.Join(path, "sepolia") } + if ctx.GlobalBool(ScrollAlphaFlag.Name) { + return filepath.Join(path, "scroll-alpha") + } return path } Fatalf("Cannot determine default data directory, please set manually (--datadir)") @@ -865,6 +872,8 @@ func setBootstrapNodes(ctx *cli.Context, cfg *p2p.Config) { urls = params.RinkebyBootnodes case ctx.GlobalBool(GoerliFlag.Name): urls = params.GoerliBootnodes + case ctx.GlobalBool(ScrollAlphaFlag.Name): + urls = params.ScrollAlphaBootnodes case cfg.BootstrapNodes != nil: return // already set, don't apply defaults. } @@ -1286,6 +1295,8 @@ func setDataDir(ctx *cli.Context, cfg *node.Config) { cfg.DataDir = filepath.Join(node.DefaultDataDir(), "goerli") case ctx.GlobalBool(SepoliaFlag.Name) && cfg.DataDir == node.DefaultDataDir(): cfg.DataDir = filepath.Join(node.DefaultDataDir(), "sepolia") + case ctx.GlobalBool(ScrollAlphaFlag.Name) && cfg.DataDir == node.DefaultDataDir(): + cfg.DataDir = filepath.Join(node.DefaultDataDir(), "scroll-alpha") } } @@ -1471,7 +1482,7 @@ func CheckExclusive(ctx *cli.Context, args ...interface{}) { // SetEthConfig applies eth-related command line flags to the config. func SetEthConfig(ctx *cli.Context, stack *node.Node, cfg *ethconfig.Config) { // Avoid conflicting network flags - CheckExclusive(ctx, MainnetFlag, DeveloperFlag, RopstenFlag, RinkebyFlag, GoerliFlag, SepoliaFlag) + CheckExclusive(ctx, MainnetFlag, DeveloperFlag, RopstenFlag, RinkebyFlag, GoerliFlag, SepoliaFlag, ScrollAlphaFlag) CheckExclusive(ctx, LightServeFlag, SyncModeFlag, "light") CheckExclusive(ctx, DeveloperFlag, ExternalSignerFlag) // Can't use both ephemeral unlocked and external signer if ctx.GlobalString(GCModeFlag.Name) == "archive" && ctx.GlobalUint64(TxLookupLimitFlag.Name) != 0 { @@ -1633,6 +1644,12 @@ func SetEthConfig(ctx *cli.Context, stack *node.Node, cfg *ethconfig.Config) { } cfg.Genesis = core.DefaultGoerliGenesisBlock() SetDNSDiscoveryDefaults(cfg, params.GoerliGenesisHash) + case ctx.GlobalBool(ScrollAlphaFlag.Name): + if !ctx.GlobalIsSet(NetworkIdFlag.Name) { + cfg.NetworkId = 534353 + } + cfg.Genesis = core.DefaultScrollAlphaGenesisBlock() + // SetDNSDiscoveryDefaults(cfg, params.ScrollAlphaGenesisHash) case ctx.GlobalBool(DeveloperFlag.Name): if !ctx.GlobalIsSet(NetworkIdFlag.Name) { cfg.NetworkId = 1337 @@ -1855,6 +1872,8 @@ func MakeGenesis(ctx *cli.Context) *core.Genesis { genesis = core.DefaultRinkebyGenesisBlock() case ctx.GlobalBool(GoerliFlag.Name): genesis = core.DefaultGoerliGenesisBlock() + case ctx.GlobalBool(ScrollAlphaFlag.Name): + genesis = core.DefaultScrollAlphaGenesisBlock() case ctx.GlobalBool(DeveloperFlag.Name): Fatalf("Developer chains are ephemeral") } diff --git a/core/genesis.go b/core/genesis.go index bc1fee8728..07c8a9ea05 100644 --- a/core/genesis.go +++ b/core/genesis.go @@ -435,6 +435,18 @@ func DefaultSepoliaGenesisBlock() *Genesis { } } +// DefaultScrollAlphaGenesisBlock returns the Scroll Alpha network genesis block. +func DefaultScrollAlphaGenesisBlock() *Genesis { + return &Genesis{ + Config: params.ScrollAlphaChainConfig, + Timestamp: 0x63f67207, + ExtraData: hexutil.MustDecode("0x0000000000000000000000000000000000000000000000000000000000000000b7C0c58702D0781C0e2eB3aaE301E4c340073448Ec9c139eFCBBe6323DA406fffBF4Db02a60A9720589c71deC4302fE718bE62350c174922782Cc6600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"), + GasLimit: 8000000, + Difficulty: big.NewInt(1), + Alloc: decodePrealloc(scrollAlphaAllocData), + } +} + // DeveloperGenesisBlock returns the 'geth --dev' genesis block. func DeveloperGenesisBlock(period uint64, gasLimit uint64, faucet common.Address) *Genesis { // Override the default period to the user requested one @@ -467,7 +479,40 @@ func DeveloperGenesisBlock(period uint64, gasLimit uint64, faucet common.Address } } +// decodePrealloc does not support code and storage in prealloc config, +// so we provide an alternative implementation here. +func decodePreallocScroll(data string) (GenesisAlloc, error) { + var p []struct { + Addr, Balance *big.Int + Code []byte + Storage []struct{ Key, Value *big.Int } + } + + if err := rlp.NewStream(strings.NewReader(data), 0).Decode(&p); err != nil { + return nil, err + } + ga := make(GenesisAlloc, len(p)) + + for _, account := range p { + s := make(map[common.Hash]common.Hash) + for _, entry := range account.Storage { + s[common.BigToHash(entry.Key)] = common.BigToHash(entry.Value) + } + + ga[common.BigToAddress(account.Addr)] = GenesisAccount{ + Balance: account.Balance, + Code: account.Code, + Storage: s, + } + } + + return ga, nil +} + func decodePrealloc(data string) GenesisAlloc { + if ga, err := decodePreallocScroll(data); err == nil { + return ga + } var p []struct{ Addr, Balance *big.Int } if err := rlp.NewStream(strings.NewReader(data), 0).Decode(&p); err != nil { panic(err) diff --git a/core/genesis_alloc.go b/core/genesis_alloc.go index 3d053904e7..10a7524d59 100644 --- a/core/genesis_alloc.go +++ b/core/genesis_alloc.go @@ -25,5 +25,6 @@ const mainnetAllocData = "\xfa\x04]X\u0793\r\x83b\x011\x8e\u0189\x9agT\x06\x908' const ropstenAllocData = "\xf9\x03\xa4\u0080\x01\xc2\x01\x01\xc2\x02\x01\xc2\x03\x01\xc2\x04\x01\xc2\x05\x01\xc2\x06\x01\xc2\a\x01\xc2\b\x01\xc2\t\x01\xc2\n\x80\xc2\v\x80\xc2\f\x80\xc2\r\x80\xc2\x0e\x80\xc2\x0f\x80\xc2\x10\x80\xc2\x11\x80\xc2\x12\x80\xc2\x13\x80\xc2\x14\x80\xc2\x15\x80\xc2\x16\x80\xc2\x17\x80\xc2\x18\x80\xc2\x19\x80\xc2\x1a\x80\xc2\x1b\x80\xc2\x1c\x80\xc2\x1d\x80\xc2\x1e\x80\xc2\x1f\x80\xc2 \x80\xc2!\x80\xc2\"\x80\xc2#\x80\xc2$\x80\xc2%\x80\xc2&\x80\xc2'\x80\xc2(\x80\xc2)\x80\xc2*\x80\xc2+\x80\xc2,\x80\xc2-\x80\xc2.\x80\xc2/\x80\xc20\x80\xc21\x80\xc22\x80\xc23\x80\xc24\x80\xc25\x80\xc26\x80\xc27\x80\xc28\x80\xc29\x80\xc2:\x80\xc2;\x80\xc2<\x80\xc2=\x80\xc2>\x80\xc2?\x80\xc2@\x80\xc2A\x80\xc2B\x80\xc2C\x80\xc2D\x80\xc2E\x80\xc2F\x80\xc2G\x80\xc2H\x80\xc2I\x80\xc2J\x80\xc2K\x80\xc2L\x80\xc2M\x80\xc2N\x80\xc2O\x80\xc2P\x80\xc2Q\x80\xc2R\x80\xc2S\x80\xc2T\x80\xc2U\x80\xc2V\x80\xc2W\x80\xc2X\x80\xc2Y\x80\xc2Z\x80\xc2[\x80\xc2\\\x80\xc2]\x80\xc2^\x80\xc2_\x80\xc2`\x80\xc2a\x80\xc2b\x80\xc2c\x80\xc2d\x80\xc2e\x80\xc2f\x80\xc2g\x80\xc2h\x80\xc2i\x80\xc2j\x80\xc2k\x80\xc2l\x80\xc2m\x80\xc2n\x80\xc2o\x80\xc2p\x80\xc2q\x80\xc2r\x80\xc2s\x80\xc2t\x80\xc2u\x80\xc2v\x80\xc2w\x80\xc2x\x80\xc2y\x80\xc2z\x80\xc2{\x80\xc2|\x80\xc2}\x80\xc2~\x80\xc2\u007f\x80\u00c1\x80\x80\u00c1\x81\x80\u00c1\x82\x80\u00c1\x83\x80\u00c1\x84\x80\u00c1\x85\x80\u00c1\x86\x80\u00c1\x87\x80\u00c1\x88\x80\u00c1\x89\x80\u00c1\x8a\x80\u00c1\x8b\x80\u00c1\x8c\x80\u00c1\x8d\x80\u00c1\x8e\x80\u00c1\x8f\x80\u00c1\x90\x80\u00c1\x91\x80\u00c1\x92\x80\u00c1\x93\x80\u00c1\x94\x80\u00c1\x95\x80\u00c1\x96\x80\u00c1\x97\x80\u00c1\x98\x80\u00c1\x99\x80\u00c1\x9a\x80\u00c1\x9b\x80\u00c1\x9c\x80\u00c1\x9d\x80\u00c1\x9e\x80\u00c1\x9f\x80\u00c1\xa0\x80\u00c1\xa1\x80\u00c1\xa2\x80\u00c1\xa3\x80\u00c1\xa4\x80\u00c1\xa5\x80\u00c1\xa6\x80\u00c1\xa7\x80\u00c1\xa8\x80\u00c1\xa9\x80\u00c1\xaa\x80\u00c1\xab\x80\u00c1\xac\x80\u00c1\xad\x80\u00c1\xae\x80\u00c1\xaf\x80\u00c1\xb0\x80\u00c1\xb1\x80\u00c1\xb2\x80\u00c1\xb3\x80\u00c1\xb4\x80\u00c1\xb5\x80\u00c1\xb6\x80\u00c1\xb7\x80\u00c1\xb8\x80\u00c1\xb9\x80\u00c1\xba\x80\u00c1\xbb\x80\u00c1\xbc\x80\u00c1\xbd\x80\u00c1\xbe\x80\u00c1\xbf\x80\u00c1\xc0\x80\u00c1\xc1\x80\u00c1\u0080\u00c1\u00c0\u00c1\u0100\u00c1\u0140\u00c1\u0180\u00c1\u01c0\u00c1\u0200\u00c1\u0240\u00c1\u0280\u00c1\u02c0\u00c1\u0300\u00c1\u0340\u00c1\u0380\u00c1\u03c0\u00c1\u0400\u00c1\u0440\u00c1\u0480\u00c1\u04c0\u00c1\u0500\u00c1\u0540\u00c1\u0580\u00c1\u05c0\u00c1\u0600\u00c1\u0640\u00c1\u0680\u00c1\u06c0\u00c1\u0700\u00c1\u0740\u00c1\u0780\u00c1\u07c0\u00c1\xe0\x80\u00c1\xe1\x80\u00c1\xe2\x80\u00c1\xe3\x80\u00c1\xe4\x80\u00c1\xe5\x80\u00c1\xe6\x80\u00c1\xe7\x80\u00c1\xe8\x80\u00c1\xe9\x80\u00c1\xea\x80\u00c1\xeb\x80\u00c1\xec\x80\u00c1\xed\x80\u00c1\xee\x80\u00c1\xef\x80\u00c1\xf0\x80\u00c1\xf1\x80\u00c1\xf2\x80\u00c1\xf3\x80\u00c1\xf4\x80\u00c1\xf5\x80\u00c1\xf6\x80\u00c1\xf7\x80\u00c1\xf8\x80\u00c1\xf9\x80\u00c1\xfa\x80\u00c1\xfb\x80\u00c1\xfc\x80\u00c1\xfd\x80\u00c1\xfe\x80\u00c1\xff\x80\u3507KT\xa8\xbd\x15)f\xd6?pk\xae\x1f\xfe\xb0A\x19!\xe5\x8d\f\x9f,\x9c\xd0Ft\xed\xea@\x00\x00\x00" const rinkebyAllocData = "\xf9\x03\xb7\u0080\x01\xc2\x01\x01\xc2\x02\x01\xc2\x03\x01\xc2\x04\x01\xc2\x05\x01\xc2\x06\x01\xc2\a\x01\xc2\b\x01\xc2\t\x01\xc2\n\x01\xc2\v\x01\xc2\f\x01\xc2\r\x01\xc2\x0e\x01\xc2\x0f\x01\xc2\x10\x01\xc2\x11\x01\xc2\x12\x01\xc2\x13\x01\xc2\x14\x01\xc2\x15\x01\xc2\x16\x01\xc2\x17\x01\xc2\x18\x01\xc2\x19\x01\xc2\x1a\x01\xc2\x1b\x01\xc2\x1c\x01\xc2\x1d\x01\xc2\x1e\x01\xc2\x1f\x01\xc2 \x01\xc2!\x01\xc2\"\x01\xc2#\x01\xc2$\x01\xc2%\x01\xc2&\x01\xc2'\x01\xc2(\x01\xc2)\x01\xc2*\x01\xc2+\x01\xc2,\x01\xc2-\x01\xc2.\x01\xc2/\x01\xc20\x01\xc21\x01\xc22\x01\xc23\x01\xc24\x01\xc25\x01\xc26\x01\xc27\x01\xc28\x01\xc29\x01\xc2:\x01\xc2;\x01\xc2<\x01\xc2=\x01\xc2>\x01\xc2?\x01\xc2@\x01\xc2A\x01\xc2B\x01\xc2C\x01\xc2D\x01\xc2E\x01\xc2F\x01\xc2G\x01\xc2H\x01\xc2I\x01\xc2J\x01\xc2K\x01\xc2L\x01\xc2M\x01\xc2N\x01\xc2O\x01\xc2P\x01\xc2Q\x01\xc2R\x01\xc2S\x01\xc2T\x01\xc2U\x01\xc2V\x01\xc2W\x01\xc2X\x01\xc2Y\x01\xc2Z\x01\xc2[\x01\xc2\\\x01\xc2]\x01\xc2^\x01\xc2_\x01\xc2`\x01\xc2a\x01\xc2b\x01\xc2c\x01\xc2d\x01\xc2e\x01\xc2f\x01\xc2g\x01\xc2h\x01\xc2i\x01\xc2j\x01\xc2k\x01\xc2l\x01\xc2m\x01\xc2n\x01\xc2o\x01\xc2p\x01\xc2q\x01\xc2r\x01\xc2s\x01\xc2t\x01\xc2u\x01\xc2v\x01\xc2w\x01\xc2x\x01\xc2y\x01\xc2z\x01\xc2{\x01\xc2|\x01\xc2}\x01\xc2~\x01\xc2\u007f\x01\u00c1\x80\x01\u00c1\x81\x01\u00c1\x82\x01\u00c1\x83\x01\u00c1\x84\x01\u00c1\x85\x01\u00c1\x86\x01\u00c1\x87\x01\u00c1\x88\x01\u00c1\x89\x01\u00c1\x8a\x01\u00c1\x8b\x01\u00c1\x8c\x01\u00c1\x8d\x01\u00c1\x8e\x01\u00c1\x8f\x01\u00c1\x90\x01\u00c1\x91\x01\u00c1\x92\x01\u00c1\x93\x01\u00c1\x94\x01\u00c1\x95\x01\u00c1\x96\x01\u00c1\x97\x01\u00c1\x98\x01\u00c1\x99\x01\u00c1\x9a\x01\u00c1\x9b\x01\u00c1\x9c\x01\u00c1\x9d\x01\u00c1\x9e\x01\u00c1\x9f\x01\u00c1\xa0\x01\u00c1\xa1\x01\u00c1\xa2\x01\u00c1\xa3\x01\u00c1\xa4\x01\u00c1\xa5\x01\u00c1\xa6\x01\u00c1\xa7\x01\u00c1\xa8\x01\u00c1\xa9\x01\u00c1\xaa\x01\u00c1\xab\x01\u00c1\xac\x01\u00c1\xad\x01\u00c1\xae\x01\u00c1\xaf\x01\u00c1\xb0\x01\u00c1\xb1\x01\u00c1\xb2\x01\u00c1\xb3\x01\u00c1\xb4\x01\u00c1\xb5\x01\u00c1\xb6\x01\u00c1\xb7\x01\u00c1\xb8\x01\u00c1\xb9\x01\u00c1\xba\x01\u00c1\xbb\x01\u00c1\xbc\x01\u00c1\xbd\x01\u00c1\xbe\x01\u00c1\xbf\x01\u00c1\xc0\x01\u00c1\xc1\x01\u00c1\xc2\x01\u00c1\xc3\x01\u00c1\xc4\x01\u00c1\xc5\x01\u00c1\xc6\x01\u00c1\xc7\x01\u00c1\xc8\x01\u00c1\xc9\x01\u00c1\xca\x01\u00c1\xcb\x01\u00c1\xcc\x01\u00c1\xcd\x01\u00c1\xce\x01\u00c1\xcf\x01\u00c1\xd0\x01\u00c1\xd1\x01\u00c1\xd2\x01\u00c1\xd3\x01\u00c1\xd4\x01\u00c1\xd5\x01\u00c1\xd6\x01\u00c1\xd7\x01\u00c1\xd8\x01\u00c1\xd9\x01\u00c1\xda\x01\u00c1\xdb\x01\u00c1\xdc\x01\u00c1\xdd\x01\u00c1\xde\x01\u00c1\xdf\x01\u00c1\xe0\x01\u00c1\xe1\x01\u00c1\xe2\x01\u00c1\xe3\x01\u00c1\xe4\x01\u00c1\xe5\x01\u00c1\xe6\x01\u00c1\xe7\x01\u00c1\xe8\x01\u00c1\xe9\x01\u00c1\xea\x01\u00c1\xeb\x01\u00c1\xec\x01\u00c1\xed\x01\u00c1\xee\x01\u00c1\xef\x01\u00c1\xf0\x01\u00c1\xf1\x01\u00c1\xf2\x01\u00c1\xf3\x01\u00c1\xf4\x01\u00c1\xf5\x01\u00c1\xf6\x01\u00c1\xf7\x01\u00c1\xf8\x01\u00c1\xf9\x01\u00c1\xfa\x01\u00c1\xfb\x01\u00c1\xfc\x01\u00c1\xfd\x01\u00c1\xfe\x01\u00c1\xff\x01\xf6\x941\xb9\x8d\x14\x00{\xde\xe67)\x80\x86\x98\x8a\v\xbd1\x18E#\xa0\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" const goerliAllocData = "\xf9\x04\x06\u0080\x01\xc2\x01\x01\xc2\x02\x01\xc2\x03\x01\xc2\x04\x01\xc2\x05\x01\xc2\x06\x01\xc2\a\x01\xc2\b\x01\xc2\t\x01\xc2\n\x01\xc2\v\x01\xc2\f\x01\xc2\r\x01\xc2\x0e\x01\xc2\x0f\x01\xc2\x10\x01\xc2\x11\x01\xc2\x12\x01\xc2\x13\x01\xc2\x14\x01\xc2\x15\x01\xc2\x16\x01\xc2\x17\x01\xc2\x18\x01\xc2\x19\x01\xc2\x1a\x01\xc2\x1b\x01\xc2\x1c\x01\xc2\x1d\x01\xc2\x1e\x01\xc2\x1f\x01\xc2 \x01\xc2!\x01\xc2\"\x01\xc2#\x01\xc2$\x01\xc2%\x01\xc2&\x01\xc2'\x01\xc2(\x01\xc2)\x01\xc2*\x01\xc2+\x01\xc2,\x01\xc2-\x01\xc2.\x01\xc2/\x01\xc20\x01\xc21\x01\xc22\x01\xc23\x01\xc24\x01\xc25\x01\xc26\x01\xc27\x01\xc28\x01\xc29\x01\xc2:\x01\xc2;\x01\xc2<\x01\xc2=\x01\xc2>\x01\xc2?\x01\xc2@\x01\xc2A\x01\xc2B\x01\xc2C\x01\xc2D\x01\xc2E\x01\xc2F\x01\xc2G\x01\xc2H\x01\xc2I\x01\xc2J\x01\xc2K\x01\xc2L\x01\xc2M\x01\xc2N\x01\xc2O\x01\xc2P\x01\xc2Q\x01\xc2R\x01\xc2S\x01\xc2T\x01\xc2U\x01\xc2V\x01\xc2W\x01\xc2X\x01\xc2Y\x01\xc2Z\x01\xc2[\x01\xc2\\\x01\xc2]\x01\xc2^\x01\xc2_\x01\xc2`\x01\xc2a\x01\xc2b\x01\xc2c\x01\xc2d\x01\xc2e\x01\xc2f\x01\xc2g\x01\xc2h\x01\xc2i\x01\xc2j\x01\xc2k\x01\xc2l\x01\xc2m\x01\xc2n\x01\xc2o\x01\xc2p\x01\xc2q\x01\xc2r\x01\xc2s\x01\xc2t\x01\xc2u\x01\xc2v\x01\xc2w\x01\xc2x\x01\xc2y\x01\xc2z\x01\xc2{\x01\xc2|\x01\xc2}\x01\xc2~\x01\xc2\u007f\x01\u00c1\x80\x01\u00c1\x81\x01\u00c1\x82\x01\u00c1\x83\x01\u00c1\x84\x01\u00c1\x85\x01\u00c1\x86\x01\u00c1\x87\x01\u00c1\x88\x01\u00c1\x89\x01\u00c1\x8a\x01\u00c1\x8b\x01\u00c1\x8c\x01\u00c1\x8d\x01\u00c1\x8e\x01\u00c1\x8f\x01\u00c1\x90\x01\u00c1\x91\x01\u00c1\x92\x01\u00c1\x93\x01\u00c1\x94\x01\u00c1\x95\x01\u00c1\x96\x01\u00c1\x97\x01\u00c1\x98\x01\u00c1\x99\x01\u00c1\x9a\x01\u00c1\x9b\x01\u00c1\x9c\x01\u00c1\x9d\x01\u00c1\x9e\x01\u00c1\x9f\x01\u00c1\xa0\x01\u00c1\xa1\x01\u00c1\xa2\x01\u00c1\xa3\x01\u00c1\xa4\x01\u00c1\xa5\x01\u00c1\xa6\x01\u00c1\xa7\x01\u00c1\xa8\x01\u00c1\xa9\x01\u00c1\xaa\x01\u00c1\xab\x01\u00c1\xac\x01\u00c1\xad\x01\u00c1\xae\x01\u00c1\xaf\x01\u00c1\xb0\x01\u00c1\xb1\x01\u00c1\xb2\x01\u00c1\xb3\x01\u00c1\xb4\x01\u00c1\xb5\x01\u00c1\xb6\x01\u00c1\xb7\x01\u00c1\xb8\x01\u00c1\xb9\x01\u00c1\xba\x01\u00c1\xbb\x01\u00c1\xbc\x01\u00c1\xbd\x01\u00c1\xbe\x01\u00c1\xbf\x01\u00c1\xc0\x01\u00c1\xc1\x01\u00c1\xc2\x01\u00c1\xc3\x01\u00c1\xc4\x01\u00c1\xc5\x01\u00c1\xc6\x01\u00c1\xc7\x01\u00c1\xc8\x01\u00c1\xc9\x01\u00c1\xca\x01\u00c1\xcb\x01\u00c1\xcc\x01\u00c1\xcd\x01\u00c1\xce\x01\u00c1\xcf\x01\u00c1\xd0\x01\u00c1\xd1\x01\u00c1\xd2\x01\u00c1\xd3\x01\u00c1\xd4\x01\u00c1\xd5\x01\u00c1\xd6\x01\u00c1\xd7\x01\u00c1\xd8\x01\u00c1\xd9\x01\u00c1\xda\x01\u00c1\xdb\x01\u00c1\xdc\x01\u00c1\xdd\x01\u00c1\xde\x01\u00c1\xdf\x01\u00c1\xe0\x01\u00c1\xe1\x01\u00c1\xe2\x01\u00c1\xe3\x01\u00c1\xe4\x01\u00c1\xe5\x01\u00c1\xe6\x01\u00c1\xe7\x01\u00c1\xe8\x01\u00c1\xe9\x01\u00c1\xea\x01\u00c1\xeb\x01\u00c1\xec\x01\u00c1\xed\x01\u00c1\xee\x01\u00c1\xef\x01\u00c1\xf0\x01\u00c1\xf1\x01\u00c1\xf2\x01\u00c1\xf3\x01\u00c1\xf4\x01\u00c1\xf5\x01\u00c1\xf6\x01\u00c1\xf7\x01\u00c1\xf8\x01\u00c1\xf9\x01\u00c1\xfa\x01\u00c1\xfb\x01\u00c1\xfc\x01\u00c1\xfd\x01\u00c1\xfe\x01\u00c1\xff\x01\xe0\x94L*\xe4\x82Y5\x05\xf0\x16<\xde\xfc\a>\x81\xc6<\xdaA\a\x8a\x15-\x02\xc7\xe1J\xf6\x80\x00\x00\xe0\x94\xa8\xe8\xf1G2e\x8eKQ\xe8q\x191\x05:\x8ai\xba\xf2\xb1\x8a\x15-\x02\xc7\xe1J\xf6\x80\x00\x00\xe1\x94\u0665\x17\x9f\t\x1d\x85\x05\x1d<\x98'\x85\xef\xd1E\\\uc199\x8b\bE\x95\x16\x14\x01HJ\x00\x00\x00\xe1\x94\u08bdBX\xd2v\x887\xba\xa2j(\xfeq\xdc\a\x9f\x84\u01cbJG\xe3\xc1$H\xf4\xad\x00\x00\x00" +const scrollAlphaAllocData = "\xf91$\xe0\x94@u\xa6\xbc\xadl<[\x94\x1c$\x82\xfd\xa7\x16\xa5f\b\x10k\x88\x8a\xc7#\x04\x89\xe8\x00\x00\x80\xc0\xf9\x06~\x94S\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\xb9\x06M`\x80`@R4\x80\x15a\x00\x10W`\x00\x80\xfd[P`\x046\x10a\x00\x9eW`\x005`\xe0\x1c\x80c\x83\xccv`\x11a\x00fW\x80c\x83\xccv`\x14a\x01\x0fW\x80c\x8d\xa5\xcb[\x14a\x01\"W\x80c\x9ez\xdcy\x14a\x015W\x80c\u0539\xf4\xfa\x14a\x01HW\x80c\xf2\xfd\xe3\x8b\x14a\x01QW`\x00\x80\xfd[\x80c&\xaa\u05f7\x14a\x00\xa3W\x80c<\xb7G\xbf\x14a\x00\xbfW\x80c`\n.w\x14a\x00\xeaW\x80cqP\x18\xa6\x14a\x00\xfdW\x80c\x81)\xfc\x1c\x14a\x01\aW[`\x00\x80\xfd[a\x00\xac`\x01T\x81V[`@Q\x90\x81R` \x01[`@Q\x80\x91\x03\x90\xf3[`STa\x00\u0490`\x01`\x01`\xa0\x1b\x03\x16\x81V[`@Q`\x01`\x01`\xa0\x1b\x03\x90\x91\x16\x81R` \x01a\x00\xb6V[a\x00\xaca\x00\xf86`\x04a\x05\x16V[a\x01dV[a\x01\x05a\x02\tV[\x00[a\x01\x05a\x02?V[a\x00\xaca\x01\x1d6`\x04a\x05\x16V[a\x02GV[`RTa\x00\u0490`\x01`\x01`\xa0\x1b\x03\x16\x81V[a\x01\x05a\x01C6`\x04a\x05/V[a\x02^V[a\x00\xac`\x00T\x81V[a\x01\x05a\x01_6`\x04a\x05/V[a\x02\xfaV[`ST`\x00\x90`\x01`\x01`\xa0\x1b\x03\x163\x14a\x01\xb7W`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`\x0e`$\x82\x01Rm7\xb76<\x906\xb2\xb9\xb9\xb2\xb73\xb2\xb9`\x91\x1b`D\x82\x01R`d\x01[`@Q\x80\x91\x03\x90\xfd[`\x00\x80a\x01\u00c4a\x03\x86V[`@\x80Q\x83\x81R` \x81\x01\x88\x90R\x92\x94P\x90\x92P\u007f\xfa\xa6\x17\xc2\xd8\xce\x12\xc6&7\xdb\xcev\xef\xcc\x18\xda\xe6\x05t\xaa\x95p\x9b\xdc\xed\xce~v\a\x16\x93\x91\x01`@Q\x80\x91\x03\x90\xa1\x93\x92PPPV[`RT`\x01`\x01`\xa0\x1b\x03\x163\x14a\x023W`@QbF\x1b\xcd`\xe5\x1b\x81R`\x04\x01a\x01\xae\x90a\x05_V[a\x02=`\x00a\x04RV[V[a\x02=a\x04\xa4V[`*\x81`(\x81\x10a\x02WW`\x00\x80\xfd[\x01T\x90P\x81V[`RT`\x01`\x01`\xa0\x1b\x03\x163\x14a\x02\x88W`@QbF\x1b\xcd`\xe5\x1b\x81R`\x04\x01a\x01\xae\x90a\x05_V[`\x01T\x15a\x02\xd8W`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`\x17`$\x82\x01R\u007fcannot update messenger\x00\x00\x00\x00\x00\x00\x00\x00\x00`D\x82\x01R`d\x01a\x01\xaeV[`S\x80T`\x01`\x01`\xa0\x1b\x03\x19\x16`\x01`\x01`\xa0\x1b\x03\x92\x90\x92\x16\x91\x90\x91\x17\x90UV[`RT`\x01`\x01`\xa0\x1b\x03\x163\x14a\x03$W`@QbF\x1b\xcd`\xe5\x1b\x81R`\x04\x01a\x01\xae\x90a\x05_V[`\x01`\x01`\xa0\x1b\x03\x81\x16a\x03zW`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`\x1d`$\x82\x01R\u007fnew owner is the zero address\x00\x00\x00`D\x82\x01R`d\x01a\x01\xaeV[a\x03\x83\x81a\x04RV[PV[`\x01T`\x00\x90\x81\x90\x83\x82[\x82\x15a\x04\"Wa\x03\xa2`\x02\x84a\x05\x96V[a\x03\xebW\x81`*\x82`(\x81\x10a\x03\xbaWa\x03\xbaa\x05\xb8V[\x01Ua\x03\xe4\x82`\x02\x83`(\x81\x10a\x03\xd3Wa\x03\xd3a\x05\xb8V[\x01T`\x00\x91\x82R` R`@\x90 \x90V[\x91Pa\x04\x16V[a\x04\x13`*\x82`(\x81\x10a\x04\x01Wa\x04\x01a\x05\xb8V[\x01T\x83`\x00\x91\x82R` R`@\x90 \x90V[\x91P[`\x01\x92\x83\x1c\x92\x01a\x03\x91V[\x81`*\x82`(\x81\x10a\x046Wa\x046a\x05\xb8V[\x01UP`\x00\x81\x90U`\x01\x80T\x80\x82\x01\x90\x91U\x95\x90\x94P\x92PPPV[`R\x80T`\x01`\x01`\xa0\x1b\x03\x83\x81\x16`\x01`\x01`\xa0\x1b\x03\x19\x83\x16\x81\x17\x90\x93U`@Q\x91\x16\x91\x90\x82\x90\u007f\x8b\xe0\a\x9cS\x16Y\x14\x13D\xcd\x1f\u0424\xf2\x84\x19I\u007f\x97\"\xa3\u06af\xe3\xb4\x18okdW\xe0\x90`\x00\x90\xa3PPV[`\x00[`(a\x04\xb4\x82`\x01a\x05\xe4V[\x10\x15a\x03\x83Wa\x04\xe5`\x02\x82`(\x81\x10a\x04\xd0Wa\x04\xd0a\x05\xb8V[\x01T`\x02\x83`(\x81\x10a\x03\xd3Wa\x03\xd3a\x05\xb8V[`\x02a\x04\xf2\x83`\x01a\x05\xe4V[`(\x81\x10a\x05\x02Wa\x05\x02a\x05\xb8V[\x01U\x80a\x05\x0e\x81a\x05\xfcV[\x91PPa\x04\xa7V[`\x00` \x82\x84\x03\x12\x15a\x05(W`\x00\x80\xfd[P5\x91\x90PV[`\x00` \x82\x84\x03\x12\x15a\x05AW`\x00\x80\xfd[\x815`\x01`\x01`\xa0\x1b\x03\x81\x16\x81\x14a\x05XW`\x00\x80\xfd[\x93\x92PPPV[` \x80\x82R`\x17\x90\x82\x01R\u007fcaller is not the owner\x00\x00\x00\x00\x00\x00\x00\x00\x00`@\x82\x01R``\x01\x90V[`\x00\x82a\x05\xb3WcNH{q`\xe0\x1b`\x00R`\x12`\x04R`$`\x00\xfd[P\x06\x90V[cNH{q`\xe0\x1b`\x00R`2`\x04R`$`\x00\xfd[cNH{q`\xe0\x1b`\x00R`\x11`\x04R`$`\x00\xfd[`\x00\x82\x19\x82\x11\x15a\x05\xf7Wa\x05\xf7a\x05\xceV[P\x01\x90V[`\x00`\x00\x19\x82\x14\x15a\x06\x10Wa\x06\x10a\x05\xceV[P`\x01\x01\x90V\xfe\xa2dipfsX\"\x12 \xca ]\x16\bZ\xa5fc0\xf880L\xfe\xe2\x9f\x0f6]\x8e\xc8\xf5\x04G\x98\x89\xac\xa3K\x97\vdsolcC\x00\b\n\x003\xd7\xd6R\x94@u\xa6\xbc\xadl<[\x94\x1c$\x82\xfd\xa7\x16\xa5f\b\x10k\xf9\x0eS\x94S\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x80\xb9\x0e\"`\x80`@R4\x80\x15a\x00\x10W`\x00\x80\xfd[P`\x046\x10a\x00\xf5W`\x005`\xe0\x1c\x80cq\"\xba\x06\x11a\x00\x97W\x80c\x93\xe5\x9d\xc1\x11a\x00fW\x80c\x93\xe5\x9d\xc1\x14a\x02\xaeW\x80c\x96\x90\xae#\x14a\x02\xc1W\x80c\xaf\xbb\xa3\x98\x14a\x02\xd4W\x80c\xf2\xfd\xe3\x8b\x14a\x02\xe7W`\x00\x80\xfd[\x80cq\"\xba\x06\x14a\x01\xe5W\x80cqP\x18\xa6\x14a\x02[W\x80c\x84\x1f\x12|\x14a\x02cW\x80c\x8d\xa5\xcb[\x14a\x02\x83W`\x00\x80\xfd[\x80c=\x0f\x96>\x11a\x00\xd3W\x80c=\x0f\x96>\x14a\x01wW\x80cE\x99\u01c8\x14a\x01\x8cW\x80cV\xe2\x14\xe4\x14a\x01\xacW\x80clOk\xa9\x14a\x01\xdcW`\x00\x80\xfd[\x80c\x03\x85\xf4\xf1\x14a\x00\xfaW\x80c\f\x19R\xd3\x14a\x010W\x80c,\xb5\x83x\x14a\x01WW[`\x00\x80\xfd[`\x02T`\x00\x90\x81R`\x04` R`@\x90 T`\x01`\x80\x1b\x90\x04`\x01`\x01`\x80\x1b\x03\x16[`@Q\x90\x81R` \x01[`@Q\x80\x91\x03\x90\xf3[`\x02T`\x00\x90\x81R`\x04` R`@\x90 T`\x01`@\x1b\x90\x04`\x01`\x01`@\x1b\x03\x16a\x01\x1dV[a\x01\x1da\x01e6`\x04a\v\xfbV[`\x00\x90\x81R`\x03` R`@\x90 T\x90V[a\x01\x8aa\x01\x856`\x04a\f\x14V[a\x02\xfaV[\x00[`\x02T`\x00\x90\x81R`\x04` R`@\x90 T`\x01`\x01`@\x1b\x03\x16a\x01\x1dV[a\x01\x1da\x01\xba6`\x04a\v\xfbV[`\x00\x90\x81R`\x04` R`@\x90 T`\x01`@\x1b\x90\x04`\x01`\x01`@\x1b\x03\x16\x90V[a\x01\x1d`\x02T\x81V[a\x02,a\x01\xf36`\x04a\v\xfbV[`\x04` R`\x00\x90\x81R`@\x90 T`\x01`\x01`@\x1b\x03\x80\x82\x16\x91`\x01`@\x1b\x81\x04\x90\x91\x16\x90`\x01`\x80\x1b\x90\x04`\x01`\x01`\x80\x1b\x03\x16\x83V[`@\x80Q`\x01`\x01`@\x1b\x03\x94\x85\x16\x81R\x93\x90\x92\x16` \x84\x01R`\x01`\x01`\x80\x1b\x03\x16\x90\x82\x01R``\x01a\x01'V[a\x01\x8aa\x03\x8eV[a\x01\x1da\x02q6`\x04a\v\xfbV[`\x03` R`\x00\x90\x81R`@\x90 T\x81V[`\x00Ta\x02\x96\x90`\x01`\x01`\xa0\x1b\x03\x16\x81V[`@Q`\x01`\x01`\xa0\x1b\x03\x90\x91\x16\x81R` \x01a\x01'V[`\x01Ta\x02\x96\x90`\x01`\x01`\xa0\x1b\x03\x16\x81V[a\x01\x8aa\x02\xcf6`\x04a\f`V[a\x03\xc4V[a\x01\x8aa\x02\xe26`\x04a\f\xd1V[a\x059V[a\x01\x8aa\x02\xf56`\x04a\f\x14V[a\v\x1fV[`\x00T`\x01`\x01`\xa0\x1b\x03\x163\x14a\x03-W`@QbF\x1b\xcd`\xe5\x1b\x81R`\x04\x01a\x03$\x90a\r_V[`@Q\x80\x91\x03\x90\xfd[`\x01\x80T`\x01`\x01`\xa0\x1b\x03\x83\x81\x16`\x01`\x01`\xa0\x1b\x03\x19\x83\x16\x81\x17\x90\x93U`@\x80Q\x91\x90\x92\x16\x80\x82R` \x82\x01\x93\x90\x93R\u007f\"\xd1\xc3_\xe0r\xd2\xe4,<\x8f\x9b\u0520\xd3J\xa8J\x01\x01\xd0 \xa6%\x17\xb3?\xdb1t\xe5\xf7\x91\x01`@Q\x80\x91\x03\x90\xa1PPV[`\x00T`\x01`\x01`\xa0\x1b\x03\x163\x14a\x03\xb8W`@QbF\x1b\xcd`\xe5\x1b\x81R`\x04\x01a\x03$\x90a\r_V[a\x03\xc2`\x00a\v\xabV[V[`\x00T`\x01`\x01`\xa0\x1b\x03\x163\x14a\x03\xeeW`@QbF\x1b\xcd`\xe5\x1b\x81R`\x04\x01a\x03$\x90a\r_V[`\x02T\x15a\x044W`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`\x13`$\x82\x01Rr\x18[\x1c\x99XY\x1eH\x1a[\x9a]\x1aX[\x1a^\x99Y`j\x1b`D\x82\x01R`d\x01a\x03$V[`\x02\x85\x90U`\x00\x85\x81R`\x03` \x90\x81R`@\x80\x83 \x84\x90U\x80Q``\x81\x01\x82R`\x01`\x01`@\x1b\x03\x80\x89\x16\x82R\x87\x81\x16\x82\x85\x01\x90\x81R`\x01`\x01`\x80\x1b\x03\x80\x89\x16\x84\x86\x01\x90\x81R\x8c\x88R`\x04\x90\x96R\x95\x84\x90 \x92Q\x83T\x91Q\x95Q\x87\x16`\x01`\x80\x1b\x02\x95\x83\x16`\x01`@\x1b\x02o\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x19\x90\x92\x16\x92\x16\x91\x90\x91\x17\x17\x90\x93\x16\x91\x90\x91\x17\x90\x91UQ\x85\x90\u007f\xa7\x82?E\xe1\xee!\xf9S\vw\x95\x9bWPz\xd5\x15\xa1O\xa9\xfa$\xd2b\xee\x80\xe7\x9b+WE\x90a\x05*\x90\x87\x90\x87\x90\x87\x90\x87\x90`\x01`\x01`@\x1b\x03\x94\x85\x16\x81R\x92\x90\x93\x16` \x83\x01R`\x01`\x01`\x80\x1b\x03\x16`@\x82\x01R``\x81\x01\x91\x90\x91R`\x80\x01\x90V[`@Q\x80\x91\x03\x90\xa2PPPPPV[`\x01T`\x01`\x01`\xa0\x1b\x03\x16\x80\x15\x80a\x05\xb5WP`@Qc\xef\u01c4\x01`\xe0\x1b\x81R3`\x04\x82\x01R`\x01`\x01`\xa0\x1b\x03\x82\x16\x90c\xef\u01c4\x01\x90`$\x01` `@Q\x80\x83\x03\x81\x86Z\xfa\x15\x80\x15a\x05\x91W=`\x00\x80>=`\x00\xfd[PPPP`@Q=`\x1f\x19`\x1f\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x05\xb5\x91\x90a\r\x96V[a\x05\xfaW`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`\x16`$\x82\x01Ru'7\xba\x10;\xb44\xba2\xb64\xb9\xba2\xb2\x109\xb2\xb722\xb9`Q\x1b`D\x82\x01R`d\x01a\x03$V[P`\x00\x80`\x00\x80`\x00a\x06\xd4V[c\b\xc3y\xa0`\xe0\x1b`\x00R` `\x04R\x80`DR`\x00[\x81\x15a\x064W`\b\x91\x90\x91\x1b\x90`\x01\x01a\x06\x1fV[`$R`d`\x00\xfd[\x80a\x06KWa\x06K\x82a\x06\bV[PPV[`\x00\x80\x825`\x00\x1a`\x80\x81\x10\x15a\x06iWP`\x01\x93\x91PPV[`\xb8\x81\x10\x15a\x06\x83W`\u007f\x19\x01\x93`\x01\x93\x90\x93\x01\x92\x91PPV[`\xc0\x81\x10\x15a\x06\xb9W`\xb7\x81\x03`\x04\x81\x11\x15a\x06\x9bW\xfe[`\x01\x85\x81\x015`\b\x83\x02a\x01\x00\x03\x1c\x96\x91\x90\x95\x01\x90\x94\x01\x93\x92PPPV[Pa\x06\xcfhNot value`\xb8\x1ba\x06\bV[\x91P\x91V[\x87`\x00\x815`\x00\x1a`\xf8\x81\x10\x15a\x06\xe7W\xfe[`\xf6\x19\x01` \x81\x11\x15a\x06\xf6W\xfe[`@Q`\x01\x84\x83\x01\x81\x01\x94\x81\x015`\b\x84\x02a\x01\x00\x03\x1c\x90\x92\x01\x90\x91\x01\x91P\x81\x8b\x827\x90\x81 \x90a\a?r\bM\x8d\xecmd\r\f.m\x04\r\xad.m\xac.\x8cm`k\x1b\x8d\x84\x14a\x06=V[`\x00\x91P[`\x10\x82\x10\x15a\a\u007fWa\aV\x83a\x06OV[`!\x82\x10\x15a\amW\x805` \x83\x90\x03`\b\x02\x1c\x83R[\x01\x92P`\x01\x91\x90\x91\x01\x90` \x01a\aDV[a\a\xad\u007fHeader RLP length mismatch\x00\x00\x00\x00\x00\x00\x8b\x8d\x01\x85\x14a\x06=V[PP`@\x80Q\x80Q``\x82\x01Qa\x01\x00\x83\x01Qa\x01`\x84\x01Qa\x01\xe0\x90\x94\x01Q`\x00\x84\x81R`\x03` R\x95\x90\x95 T\x92\x9aP\x90\x98P\x96P\x90\x94P\x90\x92P\x15\x15\x90Pa\b0W`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`\x13`$\x82\x01Rr\x14\x18\\\x99[\x9d\b\x1b\x9b\xdd\b\x1a[\\\x1b\u071d\x19Y`j\x1b`D\x82\x01R`d\x01a\x03$V[`\x00\x85\x81R`\x04` \x90\x81R`@\x91\x82\x90 \x82Q``\x81\x01\x84R\x90T`\x01`\x01`@\x1b\x03\x80\x82\x16\x80\x84R`\x01`@\x1b\x83\x04\x82\x16\x94\x84\x01\x94\x90\x94R`\x01`\x80\x1b\x90\x91\x04`\x01`\x01`\x80\x1b\x03\x16\x93\x82\x01\x93\x90\x93R\x91\x85\x16\x90a\b\x91\x90`\x01a\r\xb3V[`\x01`\x01`@\x1b\x03\x16\x14a\b\xdfW`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`\x15`$\x82\x01Rt\bM\x8d\xecmd\r\f\xad,\xed\x0e\x84\r\xad.m\xac.\x8cm`[\x1b`D\x82\x01R`d\x01a\x03$V[\x82`\x01`\x01`@\x1b\x03\x16\x81` \x01Q`\x01`\x01`@\x1b\x03\x16\x11\x15a\tOW`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`!`$\x82\x01R\u007fParent block has larger timestam`D\x82\x01R`\a`\xfc\x1b`d\x82\x01R`\x84\x01a\x03$V[\x89`\x02\x81\x90UP\x84`\x03`\x00\x8c\x81R` \x01\x90\x81R` \x01`\x00 \x81\x90UP`@Q\x80``\x01`@R\x80\x85`\x01`\x01`@\x1b\x03\x16\x81R` \x01\x84`\x01`\x01`@\x1b\x03\x16\x81R` \x01\x83`\x01`\x01`\x80\x1b\x03\x16\x81RP`\x04`\x00\x8c\x81R` \x01\x90\x81R` \x01`\x00 `\x00\x82\x01Q\x81`\x00\x01`\x00a\x01\x00\n\x81T\x81`\x01`\x01`@\x1b\x03\x02\x19\x16\x90\x83`\x01`\x01`@\x1b\x03\x16\x02\x17\x90UP` \x82\x01Q\x81`\x00\x01`\ba\x01\x00\n\x81T\x81`\x01`\x01`@\x1b\x03\x02\x19\x16\x90\x83`\x01`\x01`@\x1b\x03\x16\x02\x17\x90UP`@\x82\x01Q\x81`\x00\x01`\x10a\x01\x00\n\x81T\x81`\x01`\x01`\x80\x1b\x03\x02\x19\x16\x90\x83`\x01`\x01`\x80\x1b\x03\x16\x02\x17\x90UP\x90PP\x89\u007f\xa7\x82?E\xe1\xee!\xf9S\vw\x95\x9bWPz\xd5\x15\xa1O\xa9\xfa$\xd2b\xee\x80\xe7\x9b+WE\x85\x85\x85\x89`@Qa\n\xa4\x94\x93\x92\x91\x90`\x01`\x01`@\x1b\x03\x94\x85\x16\x81R\x92\x90\x93\x16` \x83\x01R`\x01`\x01`\x80\x1b\x03\x16`@\x82\x01R``\x81\x01\x91\x90\x91R`\x80\x01\x90V[`@Q\x80\x91\x03\x90\xa2\x86\x15a\v\x13W`@Qc\xbe\xde9\xb5`\xe0\x1b\x81R`\x01`\x01`\x80\x1b\x03\x83\x16`\x04\x82\x01R`\x02`S`\x98\x1b\x01\x90c\xbe\xde9\xb5\x90`$\x01`\x00`@Q\x80\x83\x03\x81`\x00\x87\x80;\x15\x80\x15a\n\xfaW`\x00\x80\xfd[PZ\xf1\x15\x80\x15a\v\x0eW=`\x00\x80>=`\x00\xfd[PPPP[PPPPPPPPPPV[`\x00T`\x01`\x01`\xa0\x1b\x03\x163\x14a\vIW`@QbF\x1b\xcd`\xe5\x1b\x81R`\x04\x01a\x03$\x90a\r_V[`\x01`\x01`\xa0\x1b\x03\x81\x16a\v\x9fW`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`\x1d`$\x82\x01R\u007fnew owner is the zero address\x00\x00\x00`D\x82\x01R`d\x01a\x03$V[a\v\xa8\x81a\v\xabV[PV[`\x00\x80T`\x01`\x01`\xa0\x1b\x03\x83\x81\x16`\x01`\x01`\xa0\x1b\x03\x19\x83\x16\x81\x17\x84U`@Q\x91\x90\x92\x16\x92\x83\x91\u007f\x8b\xe0\a\x9cS\x16Y\x14\x13D\xcd\x1f\u0424\xf2\x84\x19I\u007f\x97\"\xa3\u06af\xe3\xb4\x18okdW\xe0\x91\x90\xa3PPV[`\x00` \x82\x84\x03\x12\x15a\f\rW`\x00\x80\xfd[P5\x91\x90PV[`\x00` \x82\x84\x03\x12\x15a\f&W`\x00\x80\xfd[\x815`\x01`\x01`\xa0\x1b\x03\x81\x16\x81\x14a\f=W`\x00\x80\xfd[\x93\x92PPPV[\x805`\x01`\x01`@\x1b\x03\x81\x16\x81\x14a\f[W`\x00\x80\xfd[\x91\x90PV[`\x00\x80`\x00\x80`\x00`\xa0\x86\x88\x03\x12\x15a\fxW`\x00\x80\xfd[\x855\x94Pa\f\x88` \x87\x01a\fDV[\x93Pa\f\x96`@\x87\x01a\fDV[\x92P``\x86\x015`\x01`\x01`\x80\x1b\x03\x81\x16\x81\x14a\f\xb2W`\x00\x80\xfd[\x94\x97\x93\x96P\x91\x94`\x80\x015\x92\x91PPV[\x80\x15\x15\x81\x14a\v\xa8W`\x00\x80\xfd[`\x00\x80`\x00\x80``\x85\x87\x03\x12\x15a\f\xe7W`\x00\x80\xfd[\x845\x93P` \x85\x015`\x01`\x01`@\x1b\x03\x80\x82\x11\x15a\r\x05W`\x00\x80\xfd[\x81\x87\x01\x91P\x87`\x1f\x83\x01\x12a\r\x19W`\x00\x80\xfd[\x815\x81\x81\x11\x15a\r(W`\x00\x80\xfd[\x88` \x82\x85\x01\x01\x11\x15a\r:W`\x00\x80\xfd[` \x83\x01\x95P\x80\x94PPPP`@\x85\x015a\rT\x81a\f\xc3V[\x93\x96\x92\x95P\x90\x93PPV[` \x80\x82R`\x17\x90\x82\x01R\u007fcaller is not the owner\x00\x00\x00\x00\x00\x00\x00\x00\x00`@\x82\x01R``\x01\x90V[`\x00` \x82\x84\x03\x12\x15a\r\xa8W`\x00\x80\xfd[\x81Qa\f=\x81a\f\xc3V[`\x00`\x01`\x01`@\x1b\x03\x80\x83\x16\x81\x85\x16\x80\x83\x03\x82\x11\x15a\r\xe3WcNH{q`\xe0\x1b`\x00R`\x11`\x04R`$`\x00\xfd[\x01\x94\x93PPPPV\xfe\xa2dipfsX\"\x12 sq\x02s\xde\xc90\xf4'N\x03\xfc\xf7\x89\x18\x157\x9e\x00(<3\xb3\xb0\x05>\x93\xe4&t\x89\xf1dsolcC\x00\b\n\x003\xd7\u0580\x94@u\xa6\xbc\xadl<[\x94\x1c$\x82\xfd\xa7\x16\xa5f\b\x10k\xf9\b\xa4\x94S\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x80\xb9\bs`\x80`@R4\x80\x15a\x00\x10W`\x00\x80\xfd[P`\x046\x10a\x00\xcfW`\x005`\xe0\x1c\x80cqP\x18\xa6\x11a\x00\x8cW\x80c\xbe\xde9\xb5\x11a\x00fW\x80c\xbe\xde9\xb5\x14a\x01\x8dW\x80c\xde&\u0121\x14a\x01\xa0W\x80c\xf2\xfd\xe3\x8b\x14a\x01\xb3W\x80c\xf4^e\xd8\x14a\x01\xc6W`\x00\x80\xfd[\x80cqP\x18\xa6\x14a\x01GW\x80c\x8d\xa5\xcb[\x14a\x01OW\x80c\x93\xe5\x9d\xc1\x14a\x01zW`\x00\x80\xfd[\x80c\f\x18\xc1b\x14a\x00\xd4W\x80c5w\xaf\xc5\x14a\x00\xf0W\x80c=\x0f\x96>\x14a\x01\x05W\x80cI\x94\x8e\x0e\x14a\x01\x18W\x80cQ\x9bK\xd3\x14a\x01+W\x80cpFU\x97\x14a\x014W[`\x00\x80\xfd[a\x00\xdd`\x02T\x81V[`@Q\x90\x81R` \x01[`@Q\x80\x91\x03\x90\xf3[a\x01\x03a\x00\xfe6`\x04a\x06oV[a\x01\xcfV[\x00[a\x01\x03a\x01\x136`\x04a\x06\x88V[a\x02\x91V[a\x00\xdda\x01&6`\x04a\x06\xceV[a\x03\x1cV[a\x00\xdd`\x01T\x81V[a\x01\x03a\x01B6`\x04a\x06oV[a\x03aV[a\x01\x03a\x04\x16V[`\x00Ta\x01b\x90`\x01`\x01`\xa0\x1b\x03\x16\x81V[`@Q`\x01`\x01`\xa0\x1b\x03\x90\x91\x16\x81R` \x01a\x00\xe7V[`\x04Ta\x01b\x90`\x01`\x01`\xa0\x1b\x03\x16\x81V[a\x01\x03a\x01\x9b6`\x04a\x06oV[a\x04LV[a\x00\xdda\x01\xae6`\x04a\x06\xceV[a\x053V[a\x01\x03a\x01\xc16`\x04a\x06\x88V[a\x05\x93V[a\x00\xdd`\x03T\x81V[`\x00T`\x01`\x01`\xa0\x1b\x03\x163\x14a\x02\x02W`@QbF\x1b\xcd`\xe5\x1b\x81R`\x04\x01a\x01\xf9\x90a\a\u007fV[`@Q\x80\x91\x03\x90\xfd[b\x1c\x9c8\x81\x11\x15a\x02UW`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`\x17`$\x82\x01R\u007fexceed maximum overhead\x00\x00\x00\x00\x00\x00\x00\x00\x00`D\x82\x01R`d\x01a\x01\xf9V[`\x02\x81\x90U`@Q\x81\x81R\u007f2t\v5\xc0\xea!6P\xf6\rD6kO\xb2\x11\xc9\x03;PqNJ\x1d4\xe6][\ub6f4\x90` \x01[`@Q\x80\x91\x03\x90\xa1PV[`\x00T`\x01`\x01`\xa0\x1b\x03\x163\x14a\x02\xbbW`@QbF\x1b\xcd`\xe5\x1b\x81R`\x04\x01a\x01\xf9\x90a\a\u007fV[`\x04\x80T`\x01`\x01`\xa0\x1b\x03\x83\x81\x16`\x01`\x01`\xa0\x1b\x03\x19\x83\x16\x81\x17\x90\x93U`@\x80Q\x91\x90\x92\x16\x80\x82R` \x82\x01\x93\x90\x93R\u007f\"\xd1\xc3_\xe0r\xd2\xe4,<\x8f\x9b\u0520\xd3J\xa8J\x01\x01\xd0 \xa6%\x17\xb3?\xdb1t\xe5\xf7\x91\x01`@Q\x80\x91\x03\x90\xa1PPV[`\x00\x80a\x03(\x83a\x053V[\x90P`\x00`\x01T\x82a\x03:\x91\x90a\a\xb6V[\x90Pc;\x9a\xca\x00`\x03T\x82a\x03O\x91\x90a\a\xb6V[a\x03Y\x91\x90a\a\xe3V[\x94\x93PPPPV[`\x00T`\x01`\x01`\xa0\x1b\x03\x163\x14a\x03\x8bW`@QbF\x1b\xcd`\xe5\x1b\x81R`\x04\x01a\x01\xf9\x90a\a\u007fV[a\x03\x9bc;\x9a\xca\x00a\x03\xe8a\a\xb6V[\x81\x11\x15a\x03\xe1W`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`\x14`$\x82\x01Rsexceed maximum scale``\x1b`D\x82\x01R`d\x01a\x01\xf9V[`\x03\x81\x90U`@Q\x81\x81R\u007f36\u0357\b\xea\xf2v\x9a\x0f\r\xc0g\x9f0\xe8\x0f\x15\xdc\u060d\x19!\xb5\xa1hX\xe8\xb8\\Y\x1a\x90` \x01a\x02\x86V[`\x00T`\x01`\x01`\xa0\x1b\x03\x163\x14a\x04@W`@QbF\x1b\xcd`\xe5\x1b\x81R`\x04\x01a\x01\xf9\x90a\a\u007fV[a\x04J`\x00a\x06\x1fV[V[`\x04\x80T`@Qc\xef\u01c4\x01`\xe0\x1b\x81R3\x92\x81\x01\x92\x90\x92R`\x01`\x01`\xa0\x1b\x03\x16\x90c\xef\u01c4\x01\x90`$\x01` `@Q\x80\x83\x03\x81\x86Z\xfa\x15\x80\x15a\x04\x95W=`\x00\x80>=`\x00\xfd[PPPP`@Q=`\x1f\x19`\x1f\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x04\xb9\x91\x90a\b\x05V[a\x04\xfeW`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`\x16`$\x82\x01Ru'7\xba\x10;\xb44\xba2\xb64\xb9\xba2\xb2\x109\xb2\xb722\xb9`Q\x1b`D\x82\x01R`d\x01a\x01\xf9V[`\x01\x81\x90U`@Q\x81\x81R\u007f5\x1f\xb27W\xbb^\xa0Tl\x85\xb7\x99m\xddqU\xf9k\x93\x9e\xba\xa5\xff{\u011cu\xf2\u007f,D\x90` \x01a\x02\x86V[\x80Q`\x00\x90\x81\x90\x81[\x81\x81\x10\x15a\x05\x83W\x84\x81\x81Q\x81\x10a\x05VWa\x05Va\b'V[\x01` \x01Q`\x01`\x01`\xf8\x1b\x03\x19\x16a\x05tW`\x04\x83\x01\x92Pa\x05{V[`\x10\x83\x01\x92P[`\x01\x01a\x05\xd5\u059f\xd0k\xafC\x1b{\x93\xb2a\x04\x16\xe9r\xfe\x17\xb1\xfe\x1d\xe2\xac@\ndsolcC\x00\b\n\x003\xd7\u0580\x94@u\xa6\xbc\xadl<[\x94\x1c$\x82\xfd\xa7\x16\xa5f\b\x10k\xf9\x05,\x94S\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x80\xb9\x04\xfb`\x80`@R4\x80\x15a\x00\x10W`\x00\x80\xfd[P`\x046\x10a\x00WW`\x005`\xe0\x1c\x80cqP\x18\xa6\x14a\x00\\W\x80cyXm\xd7\x14a\x00fW\x80c\x8d\xa5\xcb[\x14a\x00yW\x80c\xef\u01c4\x01\x14a\x00\xa9W\x80c\xf2\xfd\xe3\x8b\x14a\x00\xe5W[`\x00\x80\xfd[a\x00da\x00\xf8V[\x00[a\x00da\x00t6`\x04a\x03VV[a\x017V[`\x00Ta\x00\x8c\x90`\x01`\x01`\xa0\x1b\x03\x16\x81V[`@Q`\x01`\x01`\xa0\x1b\x03\x90\x91\x16\x81R` \x01[`@Q\x80\x91\x03\x90\xf3[a\x00\xd5a\x00\xb76`\x04a\x04-V[`\x01`\x01`\xa0\x1b\x03\x16`\x00\x90\x81R`\x01` R`@\x90 T`\xff\x16\x90V[`@Q\x90\x15\x15\x81R` \x01a\x00\xa0V[a\x00da\x00\xf36`\x04a\x04-V[a\x028V[`\x00T`\x01`\x01`\xa0\x1b\x03\x163\x14a\x01+W`@QbF\x1b\xcd`\xe5\x1b\x81R`\x04\x01a\x01\"\x90a\x04OV[`@Q\x80\x91\x03\x90\xfd[a\x015`\x00a\x02\xc4V[V[`\x00T`\x01`\x01`\xa0\x1b\x03\x163\x14a\x01aW`@QbF\x1b\xcd`\xe5\x1b\x81R`\x04\x01a\x01\"\x90a\x04OV[`\x00[\x82Q\x81\x10\x15a\x023W\x81`\x01`\x00\x85\x84\x81Q\x81\x10a\x01\x84Wa\x01\x84a\x04\x86V[` \x02` \x01\x01Q`\x01`\x01`\xa0\x1b\x03\x16`\x01`\x01`\xa0\x1b\x03\x16\x81R` \x01\x90\x81R` \x01`\x00 `\x00a\x01\x00\n\x81T\x81`\xff\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP\x82\x81\x81Q\x81\x10a\x01\xd5Wa\x01\xd5a\x04\x86V[` \x02` \x01\x01Q`\x01`\x01`\xa0\x1b\x03\x16\u007f\x8d\xaa\xf0`\xc30l8\xe0h\xa7\\\x05K\xf9n\u0345\xa3\xdb\x12Rq,M\x93c'D\xc4.\r\x83`@Qa\x02\x19\x91\x15\x15\x81R` \x01\x90V[`@Q\x80\x91\x03\x90\xa2\x80a\x02+\x81a\x04\x9cV[\x91PPa\x01dV[PPPV[`\x00T`\x01`\x01`\xa0\x1b\x03\x163\x14a\x02bW`@QbF\x1b\xcd`\xe5\x1b\x81R`\x04\x01a\x01\"\x90a\x04OV[`\x01`\x01`\xa0\x1b\x03\x81\x16a\x02\xb8W`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`\x1d`$\x82\x01R\u007fnew owner is the zero address\x00\x00\x00`D\x82\x01R`d\x01a\x01\"V[a\x02\xc1\x81a\x02\xc4V[PV[`\x00\x80T`\x01`\x01`\xa0\x1b\x03\x83\x81\x16`\x01`\x01`\xa0\x1b\x03\x19\x83\x16\x81\x17\x84U`@Q\x91\x90\x92\x16\x92\x83\x91\u007f\x8b\xe0\a\x9cS\x16Y\x14\x13D\xcd\x1f\u0424\xf2\x84\x19I\u007f\x97\"\xa3\u06af\xe3\xb4\x18okdW\xe0\x91\x90\xa3PPV[cNH{q`\xe0\x1b`\x00R`A`\x04R`$`\x00\xfd[\x805`\x01`\x01`\xa0\x1b\x03\x81\x16\x81\x14a\x03AW`\x00\x80\xfd[\x91\x90PV[\x805\x80\x15\x15\x81\x14a\x03AW`\x00\x80\xfd[`\x00\x80`@\x83\x85\x03\x12\x15a\x03iW`\x00\x80\xfd[\x825g\xff\xff\xff\xff\xff\xff\xff\xff\x80\x82\x11\x15a\x03\x81W`\x00\x80\xfd[\x81\x85\x01\x91P\x85`\x1f\x83\x01\x12a\x03\x95W`\x00\x80\xfd[\x815` \x82\x82\x11\x15a\x03\xa9Wa\x03\xa9a\x03\x14V[\x81`\x05\x1b`@Q`\x1f\x19`?\x83\x01\x16\x81\x01\x81\x81\x10\x86\x82\x11\x17\x15a\x03\xceWa\x03\xcea\x03\x14V[`@R\x92\x83R\x81\x83\x01\x93P\x84\x81\x01\x82\x01\x92\x89\x84\x11\x15a\x03\xecW`\x00\x80\xfd[\x94\x82\x01\x94[\x83\x86\x10\x15a\x04\x11Wa\x04\x02\x86a\x03*V[\x85R\x94\x82\x01\x94\x93\x82\x01\x93a\x03\xf1V[\x96Pa\x04 \x90P\x87\x82\x01a\x03FV[\x94PPPPP\x92P\x92\x90PV[`\x00` \x82\x84\x03\x12\x15a\x04?W`\x00\x80\xfd[a\x04H\x82a\x03*V[\x93\x92PPPV[` \x80\x82R`\x17\x90\x82\x01R\u007fcaller is not the owner\x00\x00\x00\x00\x00\x00\x00\x00\x00`@\x82\x01R``\x01\x90V[cNH{q`\xe0\x1b`\x00R`2`\x04R`$`\x00\xfd[`\x00`\x00\x19\x82\x14\x15a\x04\xbeWcNH{q`\xe0\x1b`\x00R`\x11`\x04R`$`\x00\xfd[P`\x01\x01\x90V\xfe\xa2dipfsX\"\x12 \xad\x8bk\xb8L<\xa7\x1a\x1a\x1dHC:\xf1\xb6d\x91@\x90\xd9\x14:nK\xed\xbag\xf0\x83\xde4\xbddsolcC\x00\b\n\x003\xd7\u0580\x94@u\xa6\xbc\xadl<[\x94\x1c$\x82\xfd\xa7\x16\xa5f\b\x10k\xf9\a7\x94S\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x80\xb9\a\x1d`\x80`@R`\x046\x10a\x00\xa0W`\x005`\xe0\x1c\x80c1<\xe5g\x11a\x00dW\x80c1<\xe5g\x14a\x01lW\x80cp\xa0\x821\x14a\x01\x98W\x80c\x95\u061bA\x14a\x01\xc5W\x80c\xa9\x05\x9c\xbb\x14a\x01\xdaW\x80c\xd0\xe3\r\xb0\x14a\x01\xfaW\x80c\xddb\xed>\x14a\x02\x02W`\x00\x80\xfd[\x80c\x06\xfd\xde\x03\x14a\x00\xb4W\x80c\t^\xa7\xb3\x14a\x00\xdfW\x80c\x18\x16\r\xdd\x14a\x01\x0fW\x80c#\xb8r\xdd\x14a\x01,W\x80c.\x1a}M\x14a\x01LW`\x00\x80\xfd[6a\x00\xafWa\x00\xada\x02:V[\x00[`\x00\x80\xfd[4\x80\x15a\x00\xc0W`\x00\x80\xfd[Pa\x00\xc9a\x02\x88V[`@Qa\x00\u0591\x90a\x05nV[`@Q\x80\x91\x03\x90\xf3[4\x80\x15a\x00\xebW`\x00\x80\xfd[Pa\x00\xffa\x00\xfa6`\x04a\x05\xdfV[a\x03\x16V[`@Q\x90\x15\x15\x81R` \x01a\x00\xd6V[4\x80\x15a\x01\x1bW`\x00\x80\xfd[PG[`@Q\x90\x81R` \x01a\x00\xd6V[4\x80\x15a\x018W`\x00\x80\xfd[Pa\x00\xffa\x01G6`\x04a\x06\tV[a\x03\x82V[4\x80\x15a\x01XW`\x00\x80\xfd[Pa\x00\xada\x01g6`\x04a\x06EV[a\x04\xb9V[4\x80\x15a\x01xW`\x00\x80\xfd[P`\x02Ta\x01\x86\x90`\xff\x16\x81V[`@Q`\xff\x90\x91\x16\x81R` \x01a\x00\xd6V[4\x80\x15a\x01\xa4W`\x00\x80\xfd[Pa\x01\x1ea\x01\xb36`\x04a\x06^V[`\x03` R`\x00\x90\x81R`@\x90 T\x81V[4\x80\x15a\x01\xd1W`\x00\x80\xfd[Pa\x00\xc9a\x05MV[4\x80\x15a\x01\xe6W`\x00\x80\xfd[Pa\x00\xffa\x01\xf56`\x04a\x05\xdfV[a\x05ZV[a\x00\xada\x02:V[4\x80\x15a\x02\x0eW`\x00\x80\xfd[Pa\x01\x1ea\x02\x1d6`\x04a\x06yV[`\x04` \x90\x81R`\x00\x92\x83R`@\x80\x84 \x90\x91R\x90\x82R\x90 T\x81V[3`\x00\x81\x81R`\x03` \x90\x81R`@\x91\x82\x90 \x80T4\x90\x81\x01\x90\x91U\x91Q\x91\x82R\u007f\xe1\xff\xfc\u0112=\x04\xb5Y\xf4\u049a\x8b\xfcl\xda\x04\xeb[\r=`\x00\xfd[P`@Q\x81\x81R3\x90\u007f\u007f\xcfS,\x15\xf0\xa6\xdb\v\xd6\xd0\xe08\xbe\xa7\x1d0\xd8\b\xc7\u064c\xb3\xbfrh\xa9[\xf5\b\x1be\x90` \x01`@Q\x80\x91\x03\x90\xa2PV[`\x01\x80Ta\x02\x95\x90a\x06\xacV[`\x00a\x05g3\x84\x84a\x03\x82V[\x93\x92PPPV[`\x00` \x80\x83R\x83Q\x80\x82\x85\x01R`\x00[\x81\x81\x10\x15a\x05\x9bW\x85\x81\x01\x83\x01Q\x85\x82\x01`@\x01R\x82\x01a\x05\u007fV[\x81\x81\x11\x15a\x05\xadW`\x00`@\x83\x87\x01\x01R[P`\x1f\x01`\x1f\x19\x16\x92\x90\x92\x01`@\x01\x93\x92PPPV[\x805`\x01`\x01`\xa0\x1b\x03\x81\x16\x81\x14a\x05\xdaW`\x00\x80\xfd[\x91\x90PV[`\x00\x80`@\x83\x85\x03\x12\x15a\x05\xf2W`\x00\x80\xfd[a\x05\xfb\x83a\x05\xc3V[\x94` \x93\x90\x93\x015\x93PPPV[`\x00\x80`\x00``\x84\x86\x03\x12\x15a\x06\x1eW`\x00\x80\xfd[a\x06'\x84a\x05\xc3V[\x92Pa\x065` \x85\x01a\x05\xc3V[\x91P`@\x84\x015\x90P\x92P\x92P\x92V[`\x00` \x82\x84\x03\x12\x15a\x06WW`\x00\x80\xfd[P5\x91\x90PV[`\x00` \x82\x84\x03\x12\x15a\x06pW`\x00\x80\xfd[a\x05g\x82a\x05\xc3V[`\x00\x80`@\x83\x85\x03\x12\x15a\x06\x8cW`\x00\x80\xfd[a\x06\x95\x83a\x05\xc3V[\x91Pa\x06\xa3` \x84\x01a\x05\xc3V[\x90P\x92P\x92\x90PV[`\x01\x81\x81\x1c\x90\x82\x16\x80a\x06\xc0W`\u007f\x82\x16\x91P[` \x82\x10\x81\x14\x15a\x06\xe1WcNH{q`\xe0\x1b`\x00R`\"`\x04R`$`\x00\xfd[P\x91\x90PV\xfe\xa2dipfsX\"\x12 d\x90\xc73\xb5\xd6\x06\xf6\t\xa2;\xba\xe9\x13\x96+z\xf5h\xf6\x15Q\xfa\x1dV\x91\u074d\x9f\x10\x00\xb0dsolcC\x00\b\n\x003\xc0\xf9\x06\u07d4S\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x80\xb9\x06t`\x80`@R`\x046\x10a\x00\xa0W`\x005`\xe0\x1c\x80c\x84A\x1de\x11a\x00dW\x80c\x84A\x1de\x14a\x01YW\x80c\x8d\xa5\xcb[\x14a\x01oW\x80c\x9ez\xdcy\x14a\x01\x8fW\x80c\xf2\xfd\xe3\x8b\x14a\x01\xafW\x80c\xfe\xecul\x14a\x01\xcfW\x80c\xffO5F\x14a\x01\xefW`\x00\x80\xfd[\x80c<\xb7G\xbf\x14a\x00\xacW\x80c<\xcf\xd6\v\x14a\x00\xe9W\x80cE~\x1aI\x14a\x01\x00W\x80cf\xd0\x03\xac\x14a\x01$W\x80cqP\x18\xa6\x14a\x01DW`\x00\x80\xfd[6a\x00\xa7W\x00[`\x00\x80\xfd[4\x80\x15a\x00\xb8W`\x00\x80\xfd[P`\x02Ta\x00\u0310`\x01`\x01`\xa0\x1b\x03\x16\x81V[`@Q`\x01`\x01`\xa0\x1b\x03\x90\x91\x16\x81R` \x01[`@Q\x80\x91\x03\x90\xf3[4\x80\x15a\x00\xf5W`\x00\x80\xfd[Pa\x00\xfea\x02\x0fV[\x00[4\x80\x15a\x01\fW`\x00\x80\xfd[Pa\x01\x16`\x01T\x81V[`@Q\x90\x81R` \x01a\x00\xe0V[4\x80\x15a\x010W`\x00\x80\xfd[P`\x03Ta\x00\u0310`\x01`\x01`\xa0\x1b\x03\x16\x81V[4\x80\x15a\x01PW`\x00\x80\xfd[Pa\x00\xfea\x03qV[4\x80\x15a\x01eW`\x00\x80\xfd[Pa\x01\x16`\x04T\x81V[4\x80\x15a\x01{W`\x00\x80\xfd[P`\x00Ta\x00\u0310`\x01`\x01`\xa0\x1b\x03\x16\x81V[4\x80\x15a\x01\x9bW`\x00\x80\xfd[Pa\x00\xfea\x01\xaa6`\x04a\x05JV[a\x03\xa7V[4\x80\x15a\x01\xbbW`\x00\x80\xfd[Pa\x00\xfea\x01\xca6`\x04a\x05JV[a\x03\xf3V[4\x80\x15a\x01\xdbW`\x00\x80\xfd[Pa\x00\xfea\x01\xea6`\x04a\x05JV[a\x04\u007fV[4\x80\x15a\x01\xfbW`\x00\x80\xfd[Pa\x00\xfea\x02\n6`\x04a\x05zV[a\x04\xcbV[`\x01TG\x90\x81\x10\x15a\x02\xa1W`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`J`$\x82\x01R\u007fFeeVault: withdrawal amount must`D\x82\x01R\u007f be greater than minimum withdra`d\x82\x01Ri\x1d\xd8[\b\x18[[\xdd[\x9d`\xb2\x1b`\x84\x82\x01R`\xa4\x01[`@Q\x80\x91\x03\x90\xfd[`\x04\x80T\x82\x01\x90U`\x03T`@\x80Q\x83\x81R`\x01`\x01`\xa0\x1b\x03\x90\x92\x16` \x83\x01R3\x82\x82\x01RQ\u007f\u0222\x11\xccd\xb6\xed\x1bPYZ\x9f\xcb\x192\xb6\xd1\xe5\xa6\xe8\xef\x15\xb6\x0e[\x1f\x98\x8e\xa9\bk\xba\x91\x81\x90\x03``\x01\x90\xa1`\x02T`\x03T`@\x80Q` \x81\x01\x82R`\x00\x80\x82R\x91Qc\xb2&z{`\xe0\x1b\x81R`\x01`\x01`\xa0\x1b\x03\x94\x85\x16\x94c\xb2&z{\x94\x87\x94a\x03<\x94\x91\x90\x92\x16\x92\x85\x92\x90`\x04\x01a\x05\x93V[`\x00`@Q\x80\x83\x03\x81\x85\x88\x80;\x15\x80\x15a\x03UW`\x00\x80\xfd[PZ\xf1\x15\x80\x15a\x03iW=`\x00\x80>=`\x00\xfd[PPPPPPV[`\x00T`\x01`\x01`\xa0\x1b\x03\x163\x14a\x03\x9bW`@QbF\x1b\xcd`\xe5\x1b\x81R`\x04\x01a\x02\x98\x90a\x06\aV[a\x03\xa5`\x00a\x04\xfaV[V[`\x00T`\x01`\x01`\xa0\x1b\x03\x163\x14a\x03\xd1W`@QbF\x1b\xcd`\xe5\x1b\x81R`\x04\x01a\x02\x98\x90a\x06\aV[`\x02\x80T`\x01`\x01`\xa0\x1b\x03\x19\x16`\x01`\x01`\xa0\x1b\x03\x92\x90\x92\x16\x91\x90\x91\x17\x90UV[`\x00T`\x01`\x01`\xa0\x1b\x03\x163\x14a\x04\x1dW`@QbF\x1b\xcd`\xe5\x1b\x81R`\x04\x01a\x02\x98\x90a\x06\aV[`\x01`\x01`\xa0\x1b\x03\x81\x16a\x04sW`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`\x1d`$\x82\x01R\u007fnew owner is the zero address\x00\x00\x00`D\x82\x01R`d\x01a\x02\x98V[a\x04|\x81a\x04\xfaV[PV[`\x00T`\x01`\x01`\xa0\x1b\x03\x163\x14a\x04\xa9W`@QbF\x1b\xcd`\xe5\x1b\x81R`\x04\x01a\x02\x98\x90a\x06\aV[`\x03\x80T`\x01`\x01`\xa0\x1b\x03\x19\x16`\x01`\x01`\xa0\x1b\x03\x92\x90\x92\x16\x91\x90\x91\x17\x90UV[`\x00T`\x01`\x01`\xa0\x1b\x03\x163\x14a\x04\xf5W`@QbF\x1b\xcd`\xe5\x1b\x81R`\x04\x01a\x02\x98\x90a\x06\aV[`\x01UV[`\x00\x80T`\x01`\x01`\xa0\x1b\x03\x83\x81\x16`\x01`\x01`\xa0\x1b\x03\x19\x83\x16\x81\x17\x84U`@Q\x91\x90\x92\x16\x92\x83\x91\u007f\x8b\xe0\a\x9cS\x16Y\x14\x13D\xcd\x1f\u0424\xf2\x84\x19I\u007f\x97\"\xa3\u06af\xe3\xb4\x18okdW\xe0\x91\x90\xa3PPV[`\x00` \x82\x84\x03\x12\x15a\x05\\W`\x00\x80\xfd[\x815`\x01`\x01`\xa0\x1b\x03\x81\x16\x81\x14a\x05sW`\x00\x80\xfd[\x93\x92PPPV[`\x00` \x82\x84\x03\x12\x15a\x05\x8cW`\x00\x80\xfd[P5\x91\x90PV[`\x01\x80`\xa0\x1b\x03\x85\x16\x81R`\x00` \x85\x81\x84\x01R`\x80`@\x84\x01R\x84Q\x80`\x80\x85\x01R`\x00[\x81\x81\x10\x15a\x05\xd5W\x86\x81\x01\x83\x01Q\x85\x82\x01`\xa0\x01R\x82\x01a\x05\xb9V[\x81\x81\x11\x15a\x05\xe7W`\x00`\xa0\x83\x87\x01\x01R[P``\x84\x01\x94\x90\x94RPP`\x1f\x91\x90\x91\x01`\x1f\x19\x16\x01`\xa0\x01\x93\x92PPPV[` \x80\x82R`\x17\x90\x82\x01R\u007fcaller is not the owner\x00\x00\x00\x00\x00\x00\x00\x00\x00`@\x82\x01R``\x01\x90V\xfe\xa2dipfsX\"\x12 \xe5Y`\x9d\x00-\xe8\xdfMud\xcbD\x17P\xad\u00c8\xec\xf2\xcc\a\u0643\xed\x8cL\x97\x11\xb4\xeeBdsolcC\x00\b\n\x003\xf8P\xd6\x02\x94\xb7]~\x84Q~\x15\x04\xc1Q\xb2p%[\b\u007f\xd7F\xd3L\xd6\x03\x94\x13p\xf9\\H\x85\x8dN\x1b\x13y!cH\x16;\xf3V\xfe\x11\u0580\x94@u\xa6\xbc\xadl<[\x94\x1c$\x82\xfd\xa7\x16\xa5f\b\x10k\xca\x01\x88\x01cEx]\x8a\x00\x00\xf88\x94\xb7]~\x84Q~\x15\x04\xc1Q\xb2p%[\b\u007f\xd7F\xd3L\xa00dNr\xe11\xa0)\xb8PE\xb6\x81\x81X](3\xe8Hy\xb9p\x90\xb9\x1a\u048ff\x18\x00\x00\x80\xc0" const calaverasAllocData = "\xf9\x06\x14\u0080\x01\xc2\x01\x01\xc2\x02\x01\xc2\x03\x01\xc2\x04\x01\xc2\x05\x01\xc2\x06\x01\xc2\a\x01\xc2\b\x01\xc2\t\x01\xc2\n\x01\xc2\v\x01\xc2\f\x01\xc2\r\x01\xc2\x0e\x01\xc2\x0f\x01\xc2\x10\x01\xc2\x11\x01\xc2\x12\x01\xc2\x13\x01\xc2\x14\x01\xc2\x15\x01\xc2\x16\x01\xc2\x17\x01\xc2\x18\x01\xc2\x19\x01\xc2\x1a\x01\xc2\x1b\x01\xc2\x1c\x01\xc2\x1d\x01\xc2\x1e\x01\xc2\x1f\x01\xc2 \x01\xc2!\x01\xc2\"\x01\xc2#\x01\xc2$\x01\xc2%\x01\xc2&\x01\xc2'\x01\xc2(\x01\xc2)\x01\xc2*\x01\xc2+\x01\xc2,\x01\xc2-\x01\xc2.\x01\xc2/\x01\xc20\x01\xc21\x01\xc22\x01\xc23\x01\xc24\x01\xc25\x01\xc26\x01\xc27\x01\xc28\x01\xc29\x01\xc2:\x01\xc2;\x01\xc2<\x01\xc2=\x01\xc2>\x01\xc2?\x01\xc2@\x01\xc2A\x01\xc2B\x01\xc2C\x01\xc2D\x01\xc2E\x01\xc2F\x01\xc2G\x01\xc2H\x01\xc2I\x01\xc2J\x01\xc2K\x01\xc2L\x01\xc2M\x01\xc2N\x01\xc2O\x01\xc2P\x01\xc2Q\x01\xc2R\x01\xc2S\x01\xc2T\x01\xc2U\x01\xc2V\x01\xc2W\x01\xc2X\x01\xc2Y\x01\xc2Z\x01\xc2[\x01\xc2\\\x01\xc2]\x01\xc2^\x01\xc2_\x01\xc2`\x01\xc2a\x01\xc2b\x01\xc2c\x01\xc2d\x01\xc2e\x01\xc2f\x01\xc2g\x01\xc2h\x01\xc2i\x01\xc2j\x01\xc2k\x01\xc2l\x01\xc2m\x01\xc2n\x01\xc2o\x01\xc2p\x01\xc2q\x01\xc2r\x01\xc2s\x01\xc2t\x01\xc2u\x01\xc2v\x01\xc2w\x01\xc2x\x01\xc2y\x01\xc2z\x01\xc2{\x01\xc2|\x01\xc2}\x01\xc2~\x01\xc2\u007f\x01\u00c1\x80\x01\u00c1\x81\x01\u00c1\x82\x01\u00c1\x83\x01\u00c1\x84\x01\u00c1\x85\x01\u00c1\x86\x01\u00c1\x87\x01\u00c1\x88\x01\u00c1\x89\x01\u00c1\x8a\x01\u00c1\x8b\x01\u00c1\x8c\x01\u00c1\x8d\x01\u00c1\x8e\x01\u00c1\x8f\x01\u00c1\x90\x01\u00c1\x91\x01\u00c1\x92\x01\u00c1\x93\x01\u00c1\x94\x01\u00c1\x95\x01\u00c1\x96\x01\u00c1\x97\x01\u00c1\x98\x01\u00c1\x99\x01\u00c1\x9a\x01\u00c1\x9b\x01\u00c1\x9c\x01\u00c1\x9d\x01\u00c1\x9e\x01\u00c1\x9f\x01\u00c1\xa0\x01\u00c1\xa1\x01\u00c1\xa2\x01\u00c1\xa3\x01\u00c1\xa4\x01\u00c1\xa5\x01\u00c1\xa6\x01\u00c1\xa7\x01\u00c1\xa8\x01\u00c1\xa9\x01\u00c1\xaa\x01\u00c1\xab\x01\u00c1\xac\x01\u00c1\xad\x01\u00c1\xae\x01\u00c1\xaf\x01\u00c1\xb0\x01\u00c1\xb1\x01\u00c1\xb2\x01\u00c1\xb3\x01\u00c1\xb4\x01\u00c1\xb5\x01\u00c1\xb6\x01\u00c1\xb7\x01\u00c1\xb8\x01\u00c1\xb9\x01\u00c1\xba\x01\u00c1\xbb\x01\u00c1\xbc\x01\u00c1\xbd\x01\u00c1\xbe\x01\u00c1\xbf\x01\u00c1\xc0\x01\u00c1\xc1\x01\u00c1\xc2\x01\u00c1\xc3\x01\u00c1\xc4\x01\u00c1\xc5\x01\u00c1\xc6\x01\u00c1\xc7\x01\u00c1\xc8\x01\u00c1\xc9\x01\u00c1\xca\x01\u00c1\xcb\x01\u00c1\xcc\x01\u00c1\xcd\x01\u00c1\xce\x01\u00c1\xcf\x01\u00c1\xd0\x01\u00c1\xd1\x01\u00c1\xd2\x01\u00c1\xd3\x01\u00c1\xd4\x01\u00c1\xd5\x01\u00c1\xd6\x01\u00c1\xd7\x01\u00c1\xd8\x01\u00c1\xd9\x01\u00c1\xda\x01\u00c1\xdb\x01\u00c1\xdc\x01\u00c1\xdd\x01\u00c1\xde\x01\u00c1\xdf\x01\u00c1\xe0\x01\u00c1\xe1\x01\u00c1\xe2\x01\u00c1\xe3\x01\u00c1\xe4\x01\u00c1\xe5\x01\u00c1\xe6\x01\u00c1\xe7\x01\u00c1\xe8\x01\u00c1\xe9\x01\u00c1\xea\x01\u00c1\xeb\x01\u00c1\xec\x01\u00c1\xed\x01\u00c1\xee\x01\u00c1\xef\x01\u00c1\xf0\x01\u00c1\xf1\x01\u00c1\xf2\x01\u00c1\xf3\x01\u00c1\xf4\x01\u00c1\xf5\x01\u00c1\xf6\x01\u00c1\xf7\x01\u00c1\xf8\x01\u00c1\xf9\x01\u00c1\xfa\x01\u00c1\xfb\x01\u00c1\xfc\x01\u00c1\xfd\x01\u00c1\xfe\x01\u00c1\xff\x01\xf6\x94\x0e\x89\xe2\xae\xdb\x1c\xfc\u06d4$\xd4\x1a\x1f!\x8fA2s\x81r\xa0\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf6\x94\x10A\xaf\xbc\xb3Y\u0568\xdcX\xc1[/\xf5\x13T\xff\x8a!}\xa0\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf6\x94#o\xf1\xe9t\x19\xae\x93\xad\x80\xca\xfb\xaa!\"\f]x\xfb}\xa0\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf6\x94`\xad\xc0\xf8\x9aA\xaf#|\xe75T\xed\xe1p\xd73\xec\x14\xe0\xa0\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf6\x94y\x9d2\x9e_X4\x19\x16|\xd7\"\x96$\x85\x92n3\x8fJ\xa0\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf6\x94|\xf5\xb7\x9b\xfe)\x1ag\xab\x02\xb3\x93\xe4V\xcc\xc4\xc2f\xf7S\xa0\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf6\x94\x8a\x8e\xaf\xb1\xcfb\xbf\xbe\xb1t\x17i\xda\xe1\xa9\xddG\x99a\x92\xa0\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf6\x94\x8b\xa1\xf1\tU\x1b\xd42\x800\x12dZ\xc16\xdd\xd6M\xbar\xa0\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf6\x94\xb0*.\xda\x1b1\u007f\xbd\x16v\x01(\x83k\n\u015bV\x0e\x9d\xa0\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf6\x94\xba\xdc\r\xe9\xe0yK\x04\x9b^\xa6<>\x1ei\x8a4v\xc1r\xa0\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf6\x94\xf00\v\ue24a\xe2r\xeb4~\x83i\xac\fv\xdfB\xc9?\xa0\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf6\x94\xfe;U~\x8f\xb6+\x89\xf4\x91kr\x1b\xe5\\\ub08d\xbds\xa0\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" const sepoliaAllocData = "\xf9\x01\xee\u0791i\x16\xa8{\x823?BE\x04f#\xb27\x94\xc6\\\x8b\bE\x95\x16\x14\x01HJ\x00\x00\x00\xe1\x94\x10\xf5\xd4XT\xe08\a\x14\x85\xac\x9e@#\b\u03c0\xd2\xd2\xfe\x8bR\xb7\xd2\xdc\xc8\f\xd2\xe4\x00\x00\x00\u0794y\x9d2\x9e_X4\x19\x16|\xd7\"\x96$\x85\x92n3\x8fJ\x88\r\u0db3\xa7d\x00\x00\xe0\x94|\xf5\xb7\x9b\xfe)\x1ag\xab\x02\xb3\x93\xe4V\xcc\xc4\xc2f\xf7S\x8a\xd3\xc2\x1b\xce\xcc\xed\xa1\x00\x00\x00\xe0\x94\x8b\u007f\tw\xbbO\x0f\xbepv\xfa\"\xbc$\xac\xa0CX?^\x8a\xd3\xc2\x1b\xce\xcc\xed\xa1\x00\x00\x00\xe0\x94\xa2\xa6\xd949\x14O\xfeM'\xc9\xe0\x88\xdc\u0637\x83\x94bc\x8a\xd3\xc2\x1b\xce\xcc\xed\xa1\x00\x00\x00\xe0\x94\xaa\xec\x869DA\xf9\x15\xbc\xe3\xe6\xab9\x99w\xe9\x90o;i\x8a\xd3\xc2\x1b\xce\xcc\xed\xa1\x00\x00\x00\u1532\x1c3\xde\x1f\xab?\xa1T\x99\xc6+Y\xfe\f\xc3%\x00 \u044bR\xb7\xd2\xdc\xc8\f\xd2\xe4\x00\x00\x00\xe0\x94\xbc\x11)Y6\xaay\u0554\x13\x9d\xe1\xb2\xe1&)AO;\u06ca\xd3\xc2\x1b\xce\xcc\xed\xa1\x00\x00\x00\xe0\x94\xbe\xef2\xca[\x9a\x19\x8d'\xb4\xe0/LpC\x9f\xe6\x03V\u03ca\xd3\xc2\x1b\xce\xcc\xed\xa1\x00\x00\x00\xe1\x94\xd7\xd7lX\xb3\xa5\x19\xe9\xfal\xc4\xd2-\xc0\x17%\x9b\u011f\x1e\x8bR\xb7\xd2\xdc\xc8\f\xd2\xe4\x00\x00\x00\xe0\x94\xd7\xed\xdbx\xed)[<\x96)$\x0e\x89$\xfb\x8d\x88t\xdd\u060a\xd3\xc2\x1b\xce\xcc\xed\xa1\x00\x00\x00\xe0\x94\u0665\x17\x9f\t\x1d\x85\x05\x1d<\x98'\x85\xef\xd1E\\\uc199\x8a\xd3\xc2\x1b\xce\xcc\xed\xa1\x00\x00\x00\xe0\x94\xe2\xe2e\x90(\x147\x84\xd5W\xbc\xeco\xf3\xa0r\x10H\x88\n\x8a\xd3\xc2\x1b\xce\xcc\xed\xa1\x00\x00\x00\xe0\x94\xf4|\xae\x1c\xf7\x9c\xa6u\x8b\xfcx}\xbd!\u6f7eq\x12\xb8\x8a\xd3\xc2\x1b\xce\xcc\xed\xa1\x00\x00\x00" diff --git a/core/genesis_test.go b/core/genesis_test.go index 57ca690b44..02aa408fd0 100644 --- a/core/genesis_test.go +++ b/core/genesis_test.go @@ -161,29 +161,30 @@ func TestSetupGenesis(t *testing.T) { } } -// // TestGenesisHashes checks the congruity of default genesis data to -// // corresponding hardcoded genesis hash values. -// func TestGenesisHashes(t *testing.T) { -// for i, c := range []struct { -// genesis *Genesis -// want common.Hash -// }{ -// {DefaultGenesisBlock(), params.MainnetGenesisHash}, -// {DefaultGoerliGenesisBlock(), params.GoerliGenesisHash}, -// {DefaultRopstenGenesisBlock(), params.RopstenGenesisHash}, -// {DefaultRinkebyGenesisBlock(), params.RinkebyGenesisHash}, -// {DefaultSepoliaGenesisBlock(), params.SepoliaGenesisHash}, -// } { -// // Test via MustCommit -// if have := c.genesis.MustCommit(rawdb.NewMemoryDatabase()).Hash(); have != c.want { -// t.Errorf("case: %d a), want: %s, got: %s", i, c.want.Hex(), have.Hex()) -// } -// // Test via ToBlock -// if have := c.genesis.ToBlock(nil).Hash(); have != c.want { -// t.Errorf("case: %d a), want: %s, got: %s", i, c.want.Hex(), have.Hex()) -// } -// } -// } +// TestGenesisHashes checks the congruity of default genesis data to +// corresponding hardcoded genesis hash values. +func TestGenesisHashes(t *testing.T) { + for i, c := range []struct { + genesis *Genesis + want common.Hash + }{ + // {DefaultGenesisBlock(), params.MainnetGenesisHash}, + // {DefaultGoerliGenesisBlock(), params.GoerliGenesisHash}, + // {DefaultRopstenGenesisBlock(), params.RopstenGenesisHash}, + // {DefaultRinkebyGenesisBlock(), params.RinkebyGenesisHash}, + // {DefaultSepoliaGenesisBlock(), params.SepoliaGenesisHash}, + {DefaultScrollAlphaGenesisBlock(), params.ScrollAlphaGenesisHash}, + } { + // Test via MustCommit + if have := c.genesis.MustCommit(rawdb.NewMemoryDatabase()).Hash(); have != c.want { + t.Errorf("case: %d a), want: %s, got: %s", i, c.want.Hex(), have.Hex()) + } + // Test via ToBlock + if have := c.genesis.ToBlock(nil).Hash(); have != c.want { + t.Errorf("case: %d a), want: %s, got: %s", i, c.want.Hex(), have.Hex()) + } + } +} func TestGenesis_Commit(t *testing.T) { genesis := &Genesis{ diff --git a/core/mkalloc.go b/core/mkalloc.go index f728e54df3..8e928565ee 100644 --- a/core/mkalloc.go +++ b/core/mkalloc.go @@ -37,7 +37,14 @@ import ( "github.com/scroll-tech/go-ethereum/rlp" ) -type allocItem struct{ Addr, Balance *big.Int } +type storageItem struct{ Key, Value *big.Int } +type storageList []storageItem + +type allocItem struct { + Addr, Balance *big.Int + Code []byte + Storage storageList +} type allocList []allocItem @@ -48,11 +55,17 @@ func (a allocList) Swap(i, j int) { a[i], a[j] = a[j], a[i] } func makelist(g *core.Genesis) allocList { a := make(allocList, 0, len(g.Alloc)) for addr, account := range g.Alloc { - if len(account.Storage) > 0 || len(account.Code) > 0 || account.Nonce != 0 { + if account.Nonce != 0 { panic(fmt.Sprintf("can't encode account %x", addr)) } bigAddr := new(big.Int).SetBytes(addr.Bytes()) - a = append(a, allocItem{bigAddr, account.Balance}) + + s := make(storageList, 0, len(account.Storage)) + for key, value := range account.Storage { + s = append(s, storageItem{Key: new(big.Int).SetBytes(key.Bytes()), Value: new(big.Int).SetBytes(value.Bytes())}) + } + + a = append(a, allocItem{bigAddr, account.Balance, account.Code, s}) } sort.Sort(a) return a diff --git a/eth/ethconfig/config.go b/eth/ethconfig/config.go index 75ec0e90ce..a4a4375707 100644 --- a/eth/ethconfig/config.go +++ b/eth/ethconfig/config.go @@ -61,7 +61,7 @@ var LightClientGPO = gasprice.Config{ // Defaults contains default settings for use on the Ethereum main net. var Defaults = Config{ - SyncMode: downloader.SnapSync, + SyncMode: downloader.FullSync, Ethash: ethash.Config{ CacheDir: "ethash", CachesInMem: 2, diff --git a/params/bootnodes.go b/params/bootnodes.go index 3a4699bf22..f467d7710a 100644 --- a/params/bootnodes.go +++ b/params/bootnodes.go @@ -76,6 +76,13 @@ var GoerliBootnodes = []string{ "enode://a59e33ccd2b3e52d578f1fbd70c6f9babda2650f0760d6ff3b37742fdcdfdb3defba5d56d315b40c46b70198c7621e63ffa3f987389c7118634b0fefbbdfa7fd@51.15.119.157:40303", } +// ScrollAlphaBootnodes are the enode URLs of the P2P bootstrap nodes running on the Scroll Alpha test network. +var ScrollAlphaBootnodes = []string{ + "enode://996a655365e731321ca35636f5a62fdf37c0b75dc56a8832c472d077da5af47effe45874196268f6083b8f65e1a9589ed25015f68f47598c7bcc93ac8ea29e8a@35.85.116.190:30303", + "enode://a4e90d8108bbcd8b13066567c786f800812a9b6b3eeb92947e64edd19ac9231bf371da1a86796af2ccd7b7e781218ebbe2d04130d63f7b3f25d6372a706fc022@44.224.134.190:30303", + "enode://cf85bfa5828239b1f6b21758579ee8aaaba2a1fb4c658d6967c5f7ed4f040d95dee5b5cef0c77d656a191f6b0875dd03f05b30a3b2b3e15bfcf18b500d8f634c@35.155.117.77:30303", +} + var V5Bootnodes = []string{ // Teku team's bootnode "enr:-KG4QOtcP9X1FbIMOe17QNMKqDxCpm14jcX5tiOE4_TyMrFqbmhPZHK_ZPG2Gxb1GE2xdtodOfx9-cgvNtxnRyHEmC0ghGV0aDKQ9aX9QgAAAAD__________4JpZIJ2NIJpcIQDE8KdiXNlY3AyNTZrMaEDhpehBDbZjM_L9ek699Y7vhUJ-eAdMyQW_Fil522Y0fODdGNwgiMog3VkcIIjKA", diff --git a/params/config.go b/params/config.go index da977d3ec7..6a5a5c910d 100644 --- a/params/config.go +++ b/params/config.go @@ -28,11 +28,12 @@ import ( // Genesis hashes to enforce below configs on. var ( - MainnetGenesisHash = common.HexToHash("0xd4e56740f876aef8c010b86a40d5f56745a118d0906a34e69aec8c0db1cb8fa3") - RopstenGenesisHash = common.HexToHash("0x41941023680923e0fe4d74a34bdac8141f2540e3ae90623718e47d66d1ca4a2d") - SepoliaGenesisHash = common.HexToHash("0x25a5cc106eea7138acab33231d7160d69cb777ee0c2c553fcddf5138993e6dd9") - RinkebyGenesisHash = common.HexToHash("0x6341fd3daf94b748c72ced5a5b26028f2474f5f00d824504e4fa37a75767e177") - GoerliGenesisHash = common.HexToHash("0xbf7e331f7f7c1dd2e05159666b3bf8bc7a8a3a9eb1d518969eab529dd9b88c1a") + MainnetGenesisHash = common.HexToHash("0xd4e56740f876aef8c010b86a40d5f56745a118d0906a34e69aec8c0db1cb8fa3") + RopstenGenesisHash = common.HexToHash("0x41941023680923e0fe4d74a34bdac8141f2540e3ae90623718e47d66d1ca4a2d") + SepoliaGenesisHash = common.HexToHash("0x25a5cc106eea7138acab33231d7160d69cb777ee0c2c553fcddf5138993e6dd9") + RinkebyGenesisHash = common.HexToHash("0x6341fd3daf94b748c72ced5a5b26028f2474f5f00d824504e4fa37a75767e177") + GoerliGenesisHash = common.HexToHash("0xbf7e331f7f7c1dd2e05159666b3bf8bc7a8a3a9eb1d518969eab529dd9b88c1a") + ScrollAlphaGenesisHash = common.HexToHash("0xa4fc62b9b0643e345bdcebe457b3ae898bef59c7203c3db269200055e037afda") ) // TrustedCheckpoints associates each known checkpoint with the genesis hash of @@ -253,6 +254,39 @@ var ( Threshold: 2, } + // ScrollAlphaChainConfig contains the chain parameters to run a node on the Scroll Alpha test network. + ScrollFeeVaultAddress = common.HexToAddress("0x5300000000000000000000000000000000000005") + ScrollMaxTxPerBlock = 44 + + ScrollAlphaChainConfig = &ChainConfig{ + ChainID: big.NewInt(534353), + HomesteadBlock: big.NewInt(0), + DAOForkBlock: nil, + DAOForkSupport: true, + EIP150Block: big.NewInt(0), + EIP155Block: big.NewInt(0), + EIP158Block: big.NewInt(0), + ByzantiumBlock: big.NewInt(0), + ConstantinopleBlock: big.NewInt(0), + PetersburgBlock: big.NewInt(0), + IstanbulBlock: big.NewInt(0), + MuirGlacierBlock: nil, + BerlinBlock: big.NewInt(0), + LondonBlock: big.NewInt(0), + ArrowGlacierBlock: nil, + Clique: &CliqueConfig{ + Period: 3, + Epoch: 30000, + }, + Scroll: ScrollConfig{ + UseZktrie: true, + MaxTxPerBlock: &ScrollMaxTxPerBlock, + FeeVaultAddress: &ScrollFeeVaultAddress, + EnableEIP2718: false, + EnableEIP1559: false, + }, + } + // AllEthashProtocolChanges contains every protocol change (EIPs) introduced // and accepted by the Ethereum core developers into the Ethash consensus. // diff --git a/params/version.go b/params/version.go index b3fd2abe75..398deaf731 100644 --- a/params/version.go +++ b/params/version.go @@ -24,7 +24,7 @@ import ( const ( VersionMajor = 3 // Major version component of the current release VersionMinor = 1 // Minor version component of the current release - VersionPatch = 3 // Patch version component of the current release + VersionPatch = 4 // Patch version component of the current release VersionMeta = "alpha" // Version metadata to append to the version string )