1// Copyright 2020 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 17package ethtest 18 19import ( 20 "crypto/rand" 21 "math/big" 22 23 "github.com/ethereum/go-ethereum/common" 24 "github.com/ethereum/go-ethereum/common/hexutil" 25 "github.com/ethereum/go-ethereum/core/types" 26) 27 28// largeNumber returns a very large big.Int. 29func largeNumber(megabytes int) *big.Int { 30 buf := make([]byte, megabytes*1024*1024) 31 rand.Read(buf) 32 bigint := new(big.Int) 33 bigint.SetBytes(buf) 34 return bigint 35} 36 37// largeBuffer returns a very large buffer. 38func largeBuffer(megabytes int) []byte { 39 buf := make([]byte, megabytes*1024*1024) 40 rand.Read(buf) 41 return buf 42} 43 44// largeString returns a very large string. 45func largeString(megabytes int) string { 46 buf := make([]byte, megabytes*1024*1024) 47 rand.Read(buf) 48 return hexutil.Encode(buf) 49} 50 51func largeBlock() *types.Block { 52 return types.NewBlockWithHeader(largeHeader()) 53} 54 55// Returns a random hash 56func randHash() common.Hash { 57 var h common.Hash 58 rand.Read(h[:]) 59 return h 60} 61 62func largeHeader() *types.Header { 63 return &types.Header{ 64 MixDigest: randHash(), 65 ReceiptHash: randHash(), 66 TxHash: randHash(), 67 Nonce: types.BlockNonce{}, 68 Extra: []byte{}, 69 Bloom: types.Bloom{}, 70 GasUsed: 0, 71 Coinbase: common.Address{}, 72 GasLimit: 0, 73 UncleHash: types.EmptyUncleHash, 74 Time: 1337, 75 ParentHash: randHash(), 76 Root: randHash(), 77 Number: largeNumber(2), 78 Difficulty: largeNumber(2), 79 } 80} 81