github.com/unicornultrafoundation/go-u2u@v1.0.0-rc1.0.20240205080301-e74a83d3fadc/evmcore/apply_fake_genesis.go (about)

     1  // Copyright 2015 The go-ethereum Authors
     2  // This file is part of the go-ethereum library.
     3  //
     4  // The go-ethereum library is free software: you can redistribute it and/or modify
     5  // it under the terms of the GNU Lesser General Public License as published by
     6  // the Free Software Foundation, either version 3 of the License, or
     7  // (at your option) any later version.
     8  //
     9  // The go-ethereum library is distributed in the hope that it will be useful,
    10  // but WITHOUT ANY WARRANTY; without even the implied warranty of
    11  // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    12  // GNU Lesser General Public License for more details.
    13  //
    14  // You should have received a copy of the GNU Lesser General Public License
    15  // along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
    16  
    17  package evmcore
    18  
    19  import (
    20  	"crypto/ecdsa"
    21  	"errors"
    22  	"math"
    23  	"math/big"
    24  	"time"
    25  
    26  	"github.com/unicornultrafoundation/go-u2u/common"
    27  	"github.com/unicornultrafoundation/go-u2u/common/hexutil"
    28  	"github.com/unicornultrafoundation/go-u2u/core/state"
    29  	"github.com/unicornultrafoundation/go-u2u/core/types"
    30  	"github.com/unicornultrafoundation/go-u2u/crypto"
    31  	"github.com/unicornultrafoundation/go-u2u/log"
    32  
    33  	"github.com/unicornultrafoundation/go-u2u/native"
    34  )
    35  
    36  var FakeGenesisTime = native.Timestamp(1608600000 * time.Second)
    37  
    38  // ApplyFakeGenesis writes or updates the genesis block in db.
    39  func ApplyFakeGenesis(statedb *state.StateDB, time native.Timestamp, balances map[common.Address]*big.Int) (*EvmBlock, error) {
    40  	for acc, balance := range balances {
    41  		statedb.SetBalance(acc, balance)
    42  	}
    43  
    44  	// initial block
    45  	root, err := flush(statedb, true)
    46  	if err != nil {
    47  		return nil, err
    48  	}
    49  	block := genesisBlock(time, root)
    50  
    51  	return block, nil
    52  }
    53  
    54  func flush(statedb *state.StateDB, clean bool) (root common.Hash, err error) {
    55  	root, err = statedb.Commit(clean)
    56  	if err != nil {
    57  		return
    58  	}
    59  	err = statedb.Database().TrieDB().Commit(root, false, nil)
    60  	if err != nil {
    61  		return
    62  	}
    63  
    64  	if !clean {
    65  		err = statedb.Database().TrieDB().Cap(0)
    66  	}
    67  
    68  	return
    69  }
    70  
    71  // genesisBlock makes genesis block with pretty hash.
    72  func genesisBlock(time native.Timestamp, root common.Hash) *EvmBlock {
    73  	block := &EvmBlock{
    74  		EvmHeader: EvmHeader{
    75  			Number:   big.NewInt(0),
    76  			Time:     time,
    77  			GasLimit: math.MaxUint64,
    78  			Root:     root,
    79  			TxHash:   types.EmptyRootHash,
    80  		},
    81  	}
    82  
    83  	return block
    84  }
    85  
    86  // MustApplyFakeGenesis writes the genesis block and state to db, panicking on error.
    87  func MustApplyFakeGenesis(statedb *state.StateDB, time native.Timestamp, balances map[common.Address]*big.Int) *EvmBlock {
    88  	block, err := ApplyFakeGenesis(statedb, time, balances)
    89  	if err != nil {
    90  		log.Crit("ApplyFakeGenesis", "err", err)
    91  	}
    92  	return block
    93  }
    94  
    95  // FakeKey gets n-th fake private key.
    96  func FakeKey(n uint32) *ecdsa.PrivateKey {
    97  	var keys = [100]string{
    98  		"0x163f5f0f9a621d72fedd85ffca3d08d131ab4e812181e0d30ffd1c885d20aac7",
    99  		"0x3144c0aa4ced56dc15c79b045bc5559a5ac9363d98db6df321fe3847a103740f",
   100  		"0x04a531f967898df5dbe223b67989b248e23c1c356a3f6717775cccb7fe53482c",
   101  		"0x00ca81d4fe11c23fae8b5e5b06f9fe952c99ca46abaec8bda70a678cd0314dde",
   102  		"0x532d9b2ce282fad94efefcf076fdfbe5befe558b145f4cc97f953bcabf087aeb",
   103  		"0x6e50dbd3e81b22424cb230133b87bc9ef0f17c584a2a5dc4b212d2b83b5ee084",
   104  		"0x2215aaee06a2d64ca32b201e1fb9d1e3c7a25d45a6d8b0de6300ba3a20e42ef5",
   105  		"0x1cd6fdfc633c0fa73bd306c46eecd23096365b44ab75f0e6fa04dc2adbea9583",
   106  		"0x2fc91d5829f44650c32ba92c8b29d511511446b91badf03b1fd0f808b91a4b5b",
   107  		"0x6aeeb7f09e757baa9d3935a042c3d0d46a2eda19e9b676283dce4eaf32e29dc9",
   108  		"0x7d51a817ee07c3f28581c47a5072142193337fdca4d7911e58c5af2d03895d1a",
   109  		"0x59963733b8a6fb1c6eeb1ce51c7e6046e652a9bcacd4cbaa3f6f26dafe7f79f7",
   110  		"0x4cf757812428b0764a871e94b02ba026a5d3738e69f7d1d4f9f93b43ed00e820",
   111  		"0xa80a59dc6a9be8003a696ed08a4d37d5046f66201912b40c224d4fe96b515231",
   112  		"0xa2ef6534312d205b045a94ec2e9d49191a6d17702671d51dd88a9e2837b612ce",
   113  		"0x9512765baac04484c19491feb59fe8ef8ba557e29e00100f3159c8ee35c89038",
   114  		"0x700717777c4b7ccdc8c79d6823cb3ea0356ac5e3822accdfa8539cf833caae15",
   115  		"0x838ab204f288b4673bbc603ac52c167e8b1c1392cdd96bc02b8fcfadec98cc26",
   116  		"0xbf6ba360590e69d1495ea8c0ab2f4a18ebbed7c4bbbe2d823a57719cd40df94f",
   117  		"0xd2f091785e9ca0ea2388cf90a046e87552e5cbb4492a9702b83aa32dddf821ac",
   118  		"0xad8b51bf6a35a934587413394ab453df559603f885ae3ff0e90c1d90c78153bd",
   119  		"0xa1ae301b83bfdd9e4a6ffb277896e5b4438725844fd44b5f733219f9f0a1402b",
   120  		"0x9bf39f28aa39153777677711b8ca8a733ffcdad9ec8831713a01d71fb3dbe184",
   121  		"0xee948e4413ce4e82ecb51fb6669f82d5af9b0ca4c31924514e6e844e8da46051",
   122  		"0xe9a94ddcec56059cffb6dd699011f2bb323293f90613385c8624839296b3d182",
   123  		"0xbccc8d4364e82a04ea2dc840ad6eeec6a2c35a51fb01943d58728da7bd4364dc",
   124  		"0xd8af1e1f98a3628e91e46888b02cb34b00fd72aee1946409a3435ea806f1ace8",
   125  		"0x0ba54f6d7c269ae7d115a17446abe7ba52293997de821d262a3d113fd694d85a",
   126  		"0x2666d00809c1ce11da2c7598d3ab54e1bb75263d9e25d8209568a1d5e7cf9cb7",
   127  		"0x204b21603d4a076bcdd34db298229f935198ea695964a3e156289728290e6240",
   128  		"0xd30f524750dbbef5833dddbcdcdaf6c7f4e43c777d5c468d124170838e83c59d",
   129  		"0xee3002a37a510360b0de793b45dd56a4a7a1df843e04cd991441854978b5154e",
   130  		"0x410605310cdc3bb8ffe3d472ebf183545e6a09f3b211616156d42d8ad2ee1218",
   131  		"0x3d47844c536f73c3558bf2e2238b13b327be2890cad6de60a3940337b8afa774",
   132  		"0x114a976408f9a71c581871a6b68f5006df44a178e86d0bc7659d591bb4e56da6",
   133  		"0x2c1108cc823ae0c5f496ad61eaab90d0677875ab1b2e0a55a89ecd87388fa9b3",
   134  		"0x5fb2462733c28810a8bc68712a08c201ed2b89e822bc7309834476cfa1857acc",
   135  		"0x595726750f55bc28a9a2e50f92a6c5fab42e738409cab0008299039c9966e0fe",
   136  		"0x6cb89990a3ecf4930470351f1d76a72525d2f702e47d490cc0cc087893d2664a",
   137  		"0x275b9ee8df6f2c2d02cd1fb5c343f139867104d5da6f8d82afc771e2d11a28e4",
   138  		"0x3a5abe2f6ee961774f0466fca8f986fb0a53c5560b0f239d2a7ce0c8cdb3e1d1",
   139  		"0x97bb9f4bb472e89fc5405dd5786ea1de87c5d79758020abb0bfcbf4c48daf9a2",
   140  		"0x8ae00c99180aa1f9a8fe2ee7e53aaaedc0e55ff71785f26afa725295d4de78ff",
   141  		"0x65e35bf4a097d543df427ec67c192765f6edcbdda54e1b5c0bb5e99507f6a269",
   142  		"0x5fa4c34c434e0ddf1f8b3917c3e9ecfcbc09df91237012ff8105bcba275e4b7a",
   143  		"0x52ebc273f1da45483d5c6d884f0b65dda891ffee0ea6cdb0c6af90e852984e96",
   144  		"0xadec518fdc716a50ffc89c1caf6d2861ffaf02f06656d9275bd5e5d25696c840",
   145  		"0xc08f211d4803a2ab2c6c3c0745671decba5564dbebf9d339ae3344d055fd8e1d",
   146  		"0x7cf47f78fc8a5a550eae7bc77fb2943dbf8b37dfc381b35ccc6970684ac6cbee",
   147  		"0x90659790bafc92adea25095ebfabaffaa5c4bf1d1cc375ab3eac825832181398",
   148  		"0xebcae9b7ee8dc6b813fd7aa567f94d9986a7d39a4997ebea3b09db85941cedb5",
   149  		"0xde2da353e4200f22614ce98b03e7af8e3f79afa4dcd40666b679525103301606",
   150  		"0xd850eca0a7ac46bc01962bcff3cd27fff5e32d401a4a4db3883a3f0e0bdf0933",
   151  		"0xabd5c47c0be87b046603c7016258e65c4345aab4a65dde1daf60f2fb3f6c7b0c",
   152  		"0xa6c6c5d4c176336017fe715861750fe674b6552755010bd1e8f24cbee19b9b59",
   153  		"0xf90b1f7c5e046b894c4c70d93ed74367c4ec260a5ee0051876c929b0a7e98dcb",
   154  		"0x15316697d6979fd22c5e3127e030484d94e4e7d78419200e669c3c2d0d9aa2e4",
   155  		"0xe86120a57411c86be886b6df0e80ee2061ddf322043ef565b47b548c8072ae31",
   156  		"0xe3e66700a59d00d5778c6b732d0e5f90b1516881a76ee4ad232aa7d06ba11e62",
   157  		"0xdd876a98e12334ef52ca2d8e149a20b5e085e7e8c6281c2aa60736915073f53f",
   158  		"0x30ab7160e3c2ec3884117f91e5189ca1c16af03af36a75cc0169b5f2e8163a88",
   159  		"0x2b2a8abbbc4624e33f737bbcf8d864999619e7eb2e92630c2ce3a773c438fba5",
   160  		"0xffcad1487800293d08dbe6355f60c170f41ae93906293f2a30c00568f6fb8717",
   161  		"0x1b70a964ce916046ba1d3def8fc7d004f213028113e2751e3cf0a12307a21e9f",
   162  		"0x4eb12e7c8a1d99a00dc99df7f8c162a929894ab2a638048627a08d9913c02efd",
   163  		"0x6944e7e33cafcd099c1b2a88e87e8f57b3fc48a0002c4d168737f55bca9dce6e",
   164  		"0x3c2bf03d642d85932ef2f6cc23259f8cc8782c60043c9d7ae58b096a02f9007b",
   165  		"0x161c258dc7afadecfe8f8106ab619690ac01f52f669a3b1f453540bf82c78b14",
   166  		"0x2941eea6ed3ee2166a0a8ce17f4a7e571cd8fd23ca270cc72839d7bafa955845",
   167  		"0x85449300aed219707b7801669597c082dd9e4c74633472610c0009e79422da53",
   168  		"0x79254268cf6352f9910405bb8c545aeeee8fbb61293e62663f81355b0ba3d86b",
   169  		"0x548c31c260958764c20b417b416223ab8623e8364d84fc8806f665eeb084d6d9",
   170  		"0x67edd0d0682a4e7e52575884db12d03b325bd6f8a5e18fb65b143f9f25df04aa",
   171  		"0xa262f0ea06bc87c7829dc6fe38d83f99c326976a13c5a0e94da13adc5d136307",
   172  		"0x9c655e84994bbe21ac8bade72dd6ebe37491c2986a8e4eb6ab2d007e3f130270",
   173  		"0xaf06f1eb84c1f3c9e14e35e6aed34703803fea21dcf628f2bc178325b33148c1",
   174  		"0x6aad2dc6d0442b14cfbdcc0ae207c3b88d31e1294606c287d1a6b0cc58670a5f",
   175  		"0x7e4e0e156ae1532e98bfda00d850fb476f43b81f09af080446fece7b7d8ac388",
   176  		"0xdaf1bfaeb6700798569f6d4815dff9fa6590856c27e6d9aa112cb06d5f21b525",
   177  		"0xcd76b0089ef74032756bf06fdd5903c8787957e943e0622f9b35ba84185cb675",
   178  		"0xa7b791cf6aae777a7954961b6b5c66b9326ee35ce379f17f554a55bd7cc91d5f",
   179  		"0xbb76f0697e3baca59a9b7e5ad449c912ad568d371a1c579bc92b8043479606fc",
   180  		"0x95f963b910d735ffd9dfd784ca683cc790aa40acdc5fa9d27fe8e84b6900528d",
   181  		"0xe8fa32934f5e6c895f1586114cd3c84caf04f01efab47bcd8bc2efbd743e6dfb",
   182  		"0x030076ec9dd721e30c743bea5f0019e80428a97fe900b7245b968c6a6f774313",
   183  		"0xb7001594545d584baab7d6b056d3a39c325db2b450787329ed916dd26fa32260",
   184  		"0xd2a748ae6cfa9156c94754320b22b35b295dfe779887098386b2cea72f4d0dd2",
   185  		"0x258bb5bc5a87c5aebdadb7f83f39029242f0650bc52fc4cc482c89412532db2b",
   186  		"0x20ecd5168010ed59a184fd5b5ac528b9fff70ed103ea58c6f35f0137854969b8",
   187  		"0x1a517bb0a54425b29b032d4cc28423224963cda64b50ef9731b429660c8da129",
   188  		"0xee61ccd710d6dabb81849a1ca2a9369c5484b65517ea80c7772135c55aa9f147",
   189  		"0xe906f9f17d6511279053a95feca4a55ef59f97f2596790163ade48067d20238f",
   190  		"0x3c8cd94010f44ac08efaae8a31e726bb4fc95564ee7c2e03e7a43ee43f31d6ed",
   191  		"0x58ed1a9bde738f0a089ae0c7e18bf77d2489e75f282c1af6e16e0b86fc30c41e",
   192  		"0x0be230f443fdc623254292438f0c0f86ba0b799c89d15c9383aa3a64d99628e7",
   193  		"0x26a53f1c2b8fff8cfc6ca691777d1c84eb6bef60a3b3c26233c1b12faf653584",
   194  		"0x79a6be35f01db3d6a2b659b49f04505a0ce1abf3770494a7a24a83642ae8a675",
   195  		"0x54cd7ec556aeeb6f538fe1b7523a86425e520e288be516c95909582e79012bc3",
   196  		"0x675e4d1f766213db0791a274e748e858d091460fb4a9222e4b75380f8ecabcdc",
   197  		"0x4203c438d4e94bf4a595794b5f5c2882f959face730abb7a7b8acb462c8e138d",
   198  	}
   199  
   200  	if n == 0 || n > 100 {
   201  		panic(errors.New("validator num is out of range"))
   202  	}
   203  
   204  	key, _ := crypto.ToECDSA(hexutil.MustDecode(keys[n-1]))
   205  	return key
   206  }