func (m *Miner) processShare(s *ProxyServer, t *BlockTemplate, diff string, params []string) bool { paramsOrig := params[:] hashNoNonce := params[1] nonce, err := strconv.ParseUint(strings.Replace(params[0], "0x", "", -1), 16, 64) if err != nil { log.Printf("Malformed nonce: %v", err) return false } mixDigest := params[2] minerDifficulty, err := strconv.ParseFloat(diff, 64) if err != nil { log.Println("Malformed difficulty: " + diff) minerDifficulty = 5 } minerAdjustedDifficulty := int64(minerDifficulty * 1000000 * 100) share := Block{ number: t.Height, hashNoNonce: common.HexToHash(hashNoNonce), difficulty: big.NewInt(minerAdjustedDifficulty), nonce: nonce, mixDigest: common.HexToHash(mixDigest), } block := Block{ number: t.Height, hashNoNonce: common.HexToHash(hashNoNonce), difficulty: t.Difficulty, nonce: nonce, mixDigest: common.HexToHash(mixDigest), } if hasher.Verify(share) { m.heartbeat() m.storeShare(minerAdjustedDifficulty) atomic.AddUint64(&m.validShares, 1) log.Printf("Valid share from %s@%s at difficulty %v", m.Id, m.IP, minerDifficulty) } else { atomic.AddUint64(&m.invalidShares, 1) log.Printf("Invalid share from %s@%s", m.Id, m.IP) return false } if hasher.Verify(block) { _, err = s.rpc().SubmitBlock(paramsOrig) if err != nil { atomic.AddUint64(&m.invalidBlocks, 1) atomic.AddUint64(&s.invalidBlocks, 1) log.Printf("Upstream share submission failure on height: %v for %v: %v", t.Height, t.Header, err) } else { s.fetchBlockTemplate() atomic.AddUint64(&m.validBlocks, 1) atomic.AddUint64(&s.validBlocks, 1) log.Printf("Upstream share found by miner %v@%v at height: %d", m.Id, m.IP, t.Height) } } return true }
func TestInsert(t *testing.T) { trie := newEmpty() updateString(trie, "doe", "reindeer") updateString(trie, "dog", "puppy") updateString(trie, "dogglesworth", "cat") exp := common.HexToHash("8aad789dff2f538bca5d8ea56e8abe10f4c7ba3a5dea95fea4cd6e7c3a1168d3") root := trie.Hash() if root != exp { t.Errorf("exp %x got %x", exp, root) } trie = newEmpty() updateString(trie, "A", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa") exp = common.HexToHash("d23786fb4a010da3ce639d66d5e904a11dbc02746d1ce25029e53290cabf28ab") root, err := trie.Commit() if err != nil { t.Fatalf("commit error: %v", err) } if root != exp { t.Errorf("exp %x got %x", exp, root) } }
func makeBlock() *types.Block { parentHash := common.HexToHash("0x01") coinbase := common.HexToAddress("0x01") root := common.HexToHash("0x01") difficulty := common.Big1 nonce := uint64(1) block := types.NewBlock(parentHash, coinbase, root, difficulty, nonce, nil) txto := common.HexToAddress("0x02") txamount := big.NewInt(1) txgasAmount := big.NewInt(1) txgasPrice := big.NewInt(1) txdata := []byte{1, 2, 3} tx := types.NewTransactionMessage(txto, txamount, txgasAmount, txgasPrice, txdata) txs := make([]*types.Transaction, 1) txs[0] = tx block.SetTransactions(txs) uncles := make([]*types.Header, 1) uncles[0] = makeHeader() block.SetUncles(uncles) return block }
func TestTransactionSigHash(t *testing.T) { if emptyTx.SigHash() != common.HexToHash("c775b99e7ad12f50d819fcd602390467e28141316969f4b57f0626f74fe3b386") { t.Errorf("empty transaction hash mismatch, got %x", emptyTx.Hash()) } if rightvrsTx.SigHash() != common.HexToHash("fe7a79529ed5f7c3375d06b26b186a8644e0e16c373d7a12be41c62d6042b77a") { t.Errorf("RightVRS transaction hash mismatch, got %x", rightvrsTx.Hash()) } }
func makeStateLog(num int) *state.Log { address := common.HexToAddress("0x0") data := []byte{1, 2, 3} number := uint64(num) topics := make([]common.Hash, 3) topics = append(topics, common.HexToHash("0x00")) topics = append(topics, common.HexToHash("0x10")) topics = append(topics, common.HexToHash("0x20")) log := state.NewLog(address, topics, data, number) return log }
// InsertPreState populates the given database with the genesis // accounts defined by the test. func (t *BlockTest) InsertPreState(db ethdb.Database, am *accounts.Manager) (*state.StateDB, error) { statedb, err := state.New(common.Hash{}, db) if err != nil { return nil, err } for addrString, acct := range t.preAccounts { addr, err := hex.DecodeString(addrString) if err != nil { return nil, err } code, err := hex.DecodeString(strings.TrimPrefix(acct.Code, "0x")) if err != nil { return nil, err } balance, ok := new(big.Int).SetString(acct.Balance, 0) if !ok { return nil, err } nonce, err := strconv.ParseUint(prepInt(16, acct.Nonce), 16, 64) if err != nil { return nil, err } if acct.PrivateKey != "" { privkey, err := hex.DecodeString(strings.TrimPrefix(acct.PrivateKey, "0x")) err = crypto.ImportBlockTestKey(privkey) err = am.TimedUnlock(common.BytesToAddress(addr), "", 999999*time.Second) if err != nil { return nil, err } } obj := statedb.CreateAccount(common.HexToAddress(addrString)) obj.SetCode(code) obj.SetBalance(balance) obj.SetNonce(nonce) for k, v := range acct.Storage { statedb.SetState(common.HexToAddress(addrString), common.HexToHash(k), common.HexToHash(v)) } } root, err := statedb.Commit() if err != nil { return nil, fmt.Errorf("error writing state: %v", err) } if t.Genesis.Root() != root { return nil, fmt.Errorf("computed state root does not match genesis block: genesis=%x computed=%x", t.Genesis.Root().Bytes()[:4], root.Bytes()[:4]) } return statedb, nil }
func benchStateTest(ruleSet RuleSet, test VmTest, env map[string]string, b *testing.B) { b.StopTimer() db, _ := ethdb.NewMemDatabase() statedb, _ := state.New(common.Hash{}, db) for addr, account := range test.Pre { obj := StateObjectFromAccount(db, addr, account) statedb.SetStateObject(obj) for a, v := range account.Storage { obj.SetState(common.HexToHash(a), common.HexToHash(v)) } } b.StartTimer() RunState(ruleSet, statedb, env, test.Exec) }
// InsertPreState populates the given database with the genesis // accounts defined by the test. func (t *BlockTest) InsertPreState(ethereum *eth.Ethereum) (*state.StateDB, error) { db := ethereum.StateDb() statedb := state.New(common.Hash{}, db) for addrString, acct := range t.preAccounts { addr, err := hex.DecodeString(addrString) if err != nil { return nil, err } code, err := hex.DecodeString(strings.TrimPrefix(acct.Code, "0x")) if err != nil { return nil, err } balance, ok := new(big.Int).SetString(acct.Balance, 0) if !ok { return nil, err } nonce, err := strconv.ParseUint(prepInt(16, acct.Nonce), 16, 64) if err != nil { return nil, err } if acct.PrivateKey != "" { privkey, err := hex.DecodeString(strings.TrimPrefix(acct.PrivateKey, "0x")) err = crypto.ImportBlockTestKey(privkey) err = ethereum.AccountManager().TimedUnlock(common.BytesToAddress(addr), "", 999999*time.Second) if err != nil { return nil, err } } obj := statedb.CreateAccount(common.HexToAddress(addrString)) obj.SetCode(code) obj.SetBalance(balance) obj.SetNonce(nonce) for k, v := range acct.Storage { statedb.SetState(common.HexToAddress(addrString), common.HexToHash(k), common.HexToHash(v)) } } // sync objects to trie statedb.SyncObjects() // sync trie to disk statedb.Sync() if !bytes.Equal(t.Genesis.Root().Bytes(), statedb.Root().Bytes()) { return nil, fmt.Errorf("computed state root does not match genesis block %x %x", t.Genesis.Root().Bytes()[:4], statedb.Root().Bytes()[:4]) } return statedb, nil }
func (js *jsre) dumpBlock(call otto.FunctionCall) otto.Value { var block *types.Block if len(call.ArgumentList) > 0 { if call.Argument(0).IsNumber() { num, _ := call.Argument(0).ToInteger() block = js.ethereum.ChainManager().GetBlockByNumber(uint64(num)) } else if call.Argument(0).IsString() { hash, _ := call.Argument(0).ToString() block = js.ethereum.ChainManager().GetBlock(common.HexToHash(hash)) } else { fmt.Println("invalid argument for dump. Either hex string or number") } } else { block = js.ethereum.ChainManager().CurrentBlock() } if block == nil { fmt.Println("block not found") return otto.UndefinedValue() } statedb := state.New(block.Root(), js.ethereum.StateDb()) dump := statedb.RawDump() return js.re.ToVal(dump) }
func (self *Gui) DumpState(hash, path string) { var stateDump []byte if len(hash) == 0 { stateDump = self.eth.ChainManager().State().Dump() } else { var block *types.Block if hash[0] == '#' { i, _ := strconv.Atoi(hash[1:]) block = self.eth.ChainManager().GetBlockByNumber(uint64(i)) } else { block = self.eth.ChainManager().GetBlock(common.HexToHash(hash)) } if block == nil { guilogger.Infof("block err: not found %s\n", hash) return } stateDump = state.New(block.Root(), self.eth.StateDb()).Dump() } file, err := os.OpenFile(path[7:], os.O_CREATE|os.O_RDWR, os.ModePerm) if err != nil { guilogger.Infoln("dump err: ", err) return } defer file.Close() guilogger.Infof("dumped state (%s) to %s\n", hash, path) file.Write(stateDump) }
func TestDelete(t *testing.T) { trie := newEmpty() vals := []struct{ k, v string }{ {"do", "verb"}, {"ether", "wookiedoo"}, {"horse", "stallion"}, {"shaman", "horse"}, {"doge", "coin"}, {"ether", ""}, {"dog", "puppy"}, {"shaman", ""}, } for _, val := range vals { if val.v != "" { updateString(trie, val.k, val.v) } else { deleteString(trie, val.k) } } hash := trie.Hash() exp := common.HexToHash("5991bb8c6514148a29db676a14ac506cd2cd5775ace63c30a4fe457715e9ac84") if hash != exp { t.Errorf("expected %x got %x", exp, hash) } }
func TestSecureDelete(t *testing.T) { trie := newEmptySecure() vals := []struct{ k, v string }{ {"do", "verb"}, {"ether", "wookiedoo"}, {"horse", "stallion"}, {"shaman", "horse"}, {"doge", "coin"}, {"ether", ""}, {"dog", "puppy"}, {"shaman", ""}, } for _, val := range vals { if val.v != "" { trie.Update([]byte(val.k), []byte(val.v)) } else { trie.Delete([]byte(val.k)) } } hash := trie.Hash() exp := common.HexToHash("29b235a58c3c25ab83010c327d5932bcf05324b7d6b1185e650798034783ca9d") if hash != exp { t.Errorf("expected %x got %x", exp, hash) } }
func checkLogs(tlog []Log, logs state.Logs) error { if len(tlog) != len(logs) { return fmt.Errorf("log length mismatch. Expected %d, got %d", len(tlog), len(logs)) } else { for i, log := range tlog { if common.HexToAddress(log.AddressF) != logs[i].Address { return fmt.Errorf("log address expected %v got %x", log.AddressF, logs[i].Address) } if !bytes.Equal(logs[i].Data, common.FromHex(log.DataF)) { return fmt.Errorf("log data expected %v got %x", log.DataF, logs[i].Data) } if len(log.TopicsF) != len(logs[i].Topics) { return fmt.Errorf("log topics length expected %d got %d", len(log.TopicsF), logs[i].Topics) } else { for j, topic := range log.TopicsF { if common.HexToHash(topic) != logs[i].Topics[j] { return fmt.Errorf("log topic[%d] expected %v got %x", j, topic, logs[i].Topics[j]) } } } genBloom := common.LeftPadBytes(types.LogsBloom(state.Logs{logs[i]}).Bytes(), 256) if !bytes.Equal(genBloom, common.Hex2Bytes(log.BloomF)) { return fmt.Errorf("bloom mismatch") } } } return nil }
func (self *XEth) EthTransactionByHash(hash string) (tx *types.Transaction, blhash common.Hash, blnum *big.Int, txi uint64) { data, _ := self.backend.ExtraDb().Get(common.FromHex(hash)) if len(data) != 0 { tx = types.NewTransactionFromBytes(data) } else { // check pending transactions tx = self.backend.TxPool().GetTransaction(common.HexToHash(hash)) } // meta var txExtra struct { BlockHash common.Hash BlockIndex uint64 Index uint64 } v, _ := self.backend.ExtraDb().Get(append(common.FromHex(hash), 0x0001)) r := bytes.NewReader(v) err := rlp.Decode(r, &txExtra) if err == nil { blhash = txExtra.BlockHash blnum = big.NewInt(int64(txExtra.BlockIndex)) txi = txExtra.Index } else { glog.V(logger.Error).Infoln(err) } return }
func (self *ethApi) SubmitWork(req *shared.Request) (interface{}, error) { args := new(SubmitWorkArgs) if err := self.codec.Decode(req.Params, &args); err != nil { return nil, shared.NewDecodeParamError(err.Error()) } return self.xeth.RemoteMining().SubmitWork(args.Nonce, common.HexToHash(args.Digest), common.HexToHash(args.Header)), nil }
// Tests that an empty state is not scheduled for syncing. func TestEmptyStateSync(t *testing.T) { empty := common.HexToHash("56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421") db, _ := ethdb.NewMemDatabase() if req := NewStateSync(empty, db).Missing(1); len(req) != 0 { t.Errorf("content requested for empty state: %v", req) } }
func TestNewTransactionRes(t *testing.T) { to := common.HexToAddress("0x02") amount := big.NewInt(1) gasAmount := big.NewInt(1) gasPrice := big.NewInt(1) data := []byte{1, 2, 3} tx := types.NewTransactionMessage(to, amount, gasAmount, gasPrice, data) tests := map[string]string{ "hash": reHash, "nonce": reNum, "blockHash": reHashOpt, "blockNum": reNumOpt, "transactionIndex": reNumOpt, "from": reAddress, "to": reAddressOpt, "value": reNum, "gas": reNum, "gasPrice": reNum, "input": reData, } v := NewTransactionRes(tx) v.BlockHash = newHexData(common.HexToHash("0x030201")) v.BlockNumber = newHexNum(5) v.TxIndex = newHexNum(0) j, _ := json.Marshal(v) for k, re := range tests { match, _ := regexp.MatchString(fmt.Sprintf(`{.*"%s":%s.*}`, k, re), string(j)) if !match { t.Error(fmt.Sprintf("`%s` output json does not match format %s. Source %s", k, re, j)) } } }
func blockRecovery(ctx *cli.Context) { utils.CheckLegalese(ctx.GlobalString(utils.DataDirFlag.Name)) arg := ctx.Args().First() if len(ctx.Args()) < 1 && len(arg) > 0 { glog.Fatal("recover requires block number or hash") } cfg := utils.MakeEthConfig(ClientIdentifier, nodeNameVersion, ctx) utils.CheckLegalese(cfg.DataDir) blockDb, err := ethdb.NewLDBDatabase(filepath.Join(cfg.DataDir, "blockchain"), cfg.DatabaseCache) if err != nil { glog.Fatalln("could not open db:", err) } var block *types.Block if arg[0] == '#' { block = core.GetBlockByNumber(blockDb, common.String2Big(arg[1:]).Uint64()) } else { block = core.GetBlockByHash(blockDb, common.HexToHash(arg)) } if block == nil { glog.Fatalln("block not found. Recovery failed") } err = core.WriteHead(blockDb, block) if err != nil { glog.Fatalln("block write err", err) } glog.Infof("Recovery succesful. New HEAD %x\n", block.Hash()) }
func (self *XEth) EthTransactionByHash(hash string) (tx *types.Transaction, blhash common.Hash, blnum *big.Int, txi uint64) { // Due to increasing return params and need to determine if this is from transaction pool or // some chain, this probably needs to be refactored for more expressiveness data, _ := self.backend.ExtraDb().Get(common.FromHex(hash)) if len(data) != 0 { tx = types.NewTransactionFromBytes(data) } else { // check pending transactions tx = self.backend.TxPool().GetTransaction(common.HexToHash(hash)) } // meta var txExtra struct { BlockHash common.Hash BlockIndex uint64 Index uint64 } v, dberr := self.backend.ExtraDb().Get(append(common.FromHex(hash), 0x0001)) // TODO check specifically for ErrNotFound if dberr != nil { return } r := bytes.NewReader(v) err := rlp.Decode(r, &txExtra) if err == nil { blhash = txExtra.BlockHash blnum = big.NewInt(int64(txExtra.BlockIndex)) txi = txExtra.Index } else { glog.V(logger.Error).Infoln(err) } return }
// from bcValidBlockTest.json, "SimpleTx" func TestBlockEncoding(t *testing.T) { blockEnc := common.FromHex("f90260f901f9a083cafc574e1f51ba9dc0568fc617a08ea2429fb384059c972f13b19fa1c8dd55a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0ef1552a40b7165c3cd773806b9e0c165b75356e0314bf0706f279c729f51e017a05fe50b260da6308036625b850b5d6ced6d0a9f814c0688bc91ffb7b7a3a54b67a0bc37d79753ad738a6dac4921e57392f145d8887476de3f783dfa7edae9283e52b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302000001832fefd8825208845506eb0780a0bd4472abb6659ebe3ee06ee4d7b72a00a9f4d001caca51342001075469aff49888a13a5a8c8f2bb1c4f861f85f800a82c35094095e7baea6a6c7c4c2dfeb977efac326af552d870a801ba09bea4c4daac7c7c52e093e6a4c35dbbcf8856f1af7b059ba20253e70848d094fa08a8fae537ce25ed8cb5af9adac3f141af69bd515bd2ba031522df09b97dd72b1c0") var block Block if err := rlp.DecodeBytes(blockEnc, &block); err != nil { t.Fatal("decode error: ", err) } check := func(f string, got, want interface{}) { if !reflect.DeepEqual(got, want) { t.Errorf("%s mismatch: got %v, want %v", f, got, want) } } check("Difficulty", block.Difficulty(), big.NewInt(131072)) check("GasLimit", block.GasLimit(), big.NewInt(3141592)) check("GasUsed", block.GasUsed(), big.NewInt(21000)) check("Coinbase", block.Coinbase(), common.HexToAddress("8888f1f195afa192cfee860698584c030f4c9db1")) check("MixDigest", block.MixDigest(), common.HexToHash("bd4472abb6659ebe3ee06ee4d7b72a00a9f4d001caca51342001075469aff498")) check("Root", block.Root(), common.HexToHash("ef1552a40b7165c3cd773806b9e0c165b75356e0314bf0706f279c729f51e017")) check("Hash", block.Hash(), common.HexToHash("0a5843ac1cb04865017cb35a57b50b07084e5fcee39b5acadade33149f4fff9e")) check("Nonce", block.Nonce(), uint64(0xa13a5a8c8f2bb1c4)) check("Time", block.Time(), int64(1426516743)) check("Size", block.Size(), common.StorageSize(len(blockEnc))) to := common.HexToAddress("095e7baea6a6c7c4c2dfeb977efac326af552d87") check("Transactions", block.Transactions(), Transactions{ { Payload: []byte{}, Amount: big.NewInt(10), Price: big.NewInt(10), GasLimit: big.NewInt(50000), AccountNonce: 0, V: 27, R: common.String2Big("0x9bea4c4daac7c7c52e093e6a4c35dbbcf8856f1af7b059ba20253e70848d094f"), S: common.String2Big("0x8a8fae537ce25ed8cb5af9adac3f141af69bd515bd2ba031522df09b97dd72b1"), Recipient: &to, }, }) ourBlockEnc, err := rlp.EncodeToBytes(&block) if err != nil { t.Fatal("encode error: ", err) } if !bytes.Equal(ourBlockEnc, blockEnc) { t.Errorf("encoded block mismatch:\ngot: %x\nwant: %x", ourBlockEnc, blockEnc) } }
func (self *ethApi) SubmitHashrate(req *shared.Request) (interface{}, error) { args := new(SubmitHashRateArgs) if err := self.codec.Decode(req.Params, &args); err != nil { return false, shared.NewDecodeParamError(err.Error()) } self.xeth.RemoteMining().SubmitHashrate(common.HexToHash(args.Id), args.Rate) return true, nil }
// StorageAt returns the data stores in the state for the given address and location. func (be *registryAPIBackend) StorageAt(addr string, storageAddr string) string { block := be.bc.CurrentBlock() state, err := state.New(block.Root(), be.chainDb) if err != nil { return "" } return state.GetState(common.HexToAddress(addr), common.HexToHash(storageAddr)).Hex() }
func (self *Block) GetTransaction(hash string) *Transaction { tx := self.ref.Transaction(common.HexToHash(hash)) if tx == nil { return nil } return NewTx(tx) }
// MustMakeChainConfigFromDb reads the chain configuration from the given database. func MustMakeChainConfigFromDb(ctx *cli.Context, db ethdb.Database) *core.ChainConfig { // If the chain is already initialized, use any existing chain configs config := new(core.ChainConfig) genesis := core.GetBlock(db, core.GetCanonicalHash(db, 0)) if genesis != nil { storedConfig, err := core.GetChainConfig(db, genesis.Hash()) switch err { case nil: config = storedConfig case core.ChainConfigNotFoundErr: // No configs found, use empty, will populate below default: Fatalf("Could not make chain configuration: %v", err) } } // Set any missing fields due to them being unset or system upgrade if config.HomesteadBlock == nil { if ctx.GlobalBool(TestNetFlag.Name) { config.HomesteadBlock = params.TestNetHomesteadBlock } else { config.HomesteadBlock = params.MainNetHomesteadBlock } } if config.DAOForkBlock == nil { if ctx.GlobalBool(TestNetFlag.Name) { config.DAOForkBlock = params.TestNetDAOForkBlock } else { config.DAOForkBlock = params.MainNetDAOForkBlock } config.DAOForkSupport = true } // Force override any existing configs if explicitly requested switch { case ctx.GlobalBool(SupportDAOFork.Name): config.DAOForkSupport = true case ctx.GlobalBool(OpposeDAOFork.Name): config.DAOForkSupport = false } // Temporarilly display a proper message so the user knows which fork its on if !ctx.GlobalBool(TestNetFlag.Name) && (genesis == nil || genesis.Hash() == common.HexToHash("0xd4e56740f876aef8c010b86a40d5f56745a118d0906a34e69aec8c0db1cb8fa3")) { choice := "SUPPORT" if !config.DAOForkSupport { choice = "OPPOSE" } current := fmt.Sprintf("Geth is currently configured to %s the DAO hard-fork!", choice) howtoswap := fmt.Sprintf("You can change your choice prior to block #%v with --support-dao-fork or --oppose-dao-fork.", config.DAOForkBlock) howtosync := fmt.Sprintf("After the hard-fork block #%v passed, changing chains requires a resync from scratch!", config.DAOForkBlock) separator := strings.Repeat("-", len(howtoswap)) glog.V(logger.Warn).Info(separator) glog.V(logger.Warn).Info(current) glog.V(logger.Warn).Info(howtoswap) glog.V(logger.Warn).Info(howtosync) glog.V(logger.Warn).Info(separator) } return config }
func cTopics(t [][]string) [][]common.Hash { topics := make([][]common.Hash, len(t)) for i, iv := range t { topics[i] = make([]common.Hash, len(iv)) for j, jv := range iv { topics[i][j] = common.HexToHash(jv) } } return topics }
func TestMissingRoot(t *testing.T) { db, _ := ethdb.NewMemDatabase() trie, err := New(common.HexToHash("0beec7b5ea3f0fdbc95d0dd47f3c5bc275da8a33"), db) if trie != nil { t.Error("New returned non-nil trie for invalid root") } if _, ok := err.(*MissingNodeError); !ok { t.Errorf("New returned wrong error: %v", err) } }
func (self *XEth) Sign(fromStr, hashStr string, didUnlock bool) (string, error) { var ( from = common.HexToAddress(fromStr) hash = common.HexToHash(hashStr) ) sig, err := self.doSign(from, hash, didUnlock) if err != nil { return "", err } return common.ToHex(sig), nil }
func runBlockTest(test *BlockTest) error { ks := crypto.NewKeyStorePassphrase(filepath.Join(common.DefaultDataDir(), "keystore"), crypto.StandardScryptN, crypto.StandardScryptP) am := accounts.NewManager(ks) db, _ := ethdb.NewMemDatabase() cfg := ð.Config{ DataDir: common.DefaultDataDir(), Verbosity: 5, Etherbase: common.Address{}, AccountManager: am, NewDB: func(path string) (ethdb.Database, error) { return db, nil }, } cfg.GenesisBlock = test.Genesis // import pre accounts & construct test genesis block & state root _, err := test.InsertPreState(db, am) if err != nil { return fmt.Errorf("InsertPreState: %v", err) } ethereum, err := eth.New(cfg) if err != nil { return err } err = ethereum.Start() if err != nil { return err } cm := ethereum.BlockChain() validBlocks, err := test.TryBlocksInsert(cm) if err != nil { return err } lastblockhash := common.HexToHash(test.lastblockhash) cmlast := cm.LastBlockHash() if lastblockhash != cmlast { return fmt.Errorf("lastblockhash validation mismatch: want: %x, have: %x", lastblockhash, cmlast) } newDB, err := cm.State() if err != nil { return err } if err = test.ValidatePostState(newDB); err != nil { return fmt.Errorf("post state validation failed: %v", err) } return test.ValidateImportedHeaders(cm, validBlocks) }
func NewEnvFromMap(state *state.StateDB, envValues map[string]string, exeValues map[string]string) *Env { env := NewEnv(state) env.origin = common.HexToAddress(exeValues["caller"]) env.parent = common.HexToHash(envValues["previousHash"]) env.coinbase = common.HexToAddress(envValues["currentCoinbase"]) env.number = common.Big(envValues["currentNumber"]) env.time = common.Big(envValues["currentTimestamp"]) env.difficulty = common.Big(envValues["currentDifficulty"]) env.gasLimit = common.Big(envValues["currentGasLimit"]) env.Gas = new(big.Int) return env }
// Register registers a new content hash in the registry. func (api *PrivateRegistarAPI) Register(sender common.Address, addr common.Address, contentHashHex string) (bool, error) { block := api.be.bc.CurrentBlock() state, err := state.New(block.Root(), api.be.chainDb) if err != nil { return false, err } codeb := state.GetCode(addr) codeHash := common.BytesToHash(crypto.Keccak256(codeb)) contentHash := common.HexToHash(contentHashHex) _, err = registrar.New(api.be).SetHashToHash(sender, codeHash, contentHash) return err == nil, err }