aboutsummaryrefslogtreecommitdiffstats
path: root/core/state_processor.go
diff options
context:
space:
mode:
authorPéter Szilágyi <peterke@gmail.com>2016-06-29 16:44:40 +0800
committerPéter Szilágyi <peterke@gmail.com>2016-06-29 16:44:40 +0800
commitd55fc35df1ca4996048625421d4c475a437d273e (patch)
tree524f041d216fc9023fc0cfeaefd81631e13a1f35 /core/state_processor.go
parent67e9d3348679d87cca127de4da8eb4223c43aae2 (diff)
downloadgo-tangerine-d55fc35df1ca4996048625421d4c475a437d273e.tar.gz
go-tangerine-d55fc35df1ca4996048625421d4c475a437d273e.tar.zst
go-tangerine-d55fc35df1ca4996048625421d4c475a437d273e.zip
Revert "core: add voting and result tracking for the dao soft-fork"
This reverts commit c4de28938ff8c688c4444c8b3e8e28a52cbc62ff.
Diffstat (limited to 'core/state_processor.go')
-rw-r--r--core/state_processor.go71
1 files changed, 10 insertions, 61 deletions
diff --git a/core/state_processor.go b/core/state_processor.go
index 1e54eefa3..55c1301eb 100644
--- a/core/state_processor.go
+++ b/core/state_processor.go
@@ -32,20 +32,13 @@ import (
var (
big8 = big.NewInt(8)
big32 = big.NewInt(32)
- blockedCodeHashErr = errors.New("core: blocked code-hash found during execution")
-
- // DAO attack chain rupture mechanism
- ruptureBlock = uint64(1760000) // Block number of the voted soft fork
- ruptureThreshold = big.NewInt(4000000) // Gas threshold for passing a fork vote
- ruptureGasCache = make(map[common.Hash]*big.Int) // Amount of gas in the point of rupture
- ruptureCodeHashes = map[common.Hash]struct{}{
- common.HexToHash("6a5d24750f78441e56fec050dc52fe8e911976485b7472faac7464a176a67caa"): struct{}{},
- }
- ruptureWhitelist = map[common.Address]bool{
+ illegalCodeHashErr = errors.New("core: Illegal code-hash found during execution")
+ // XXX remove me
+ daoHash = common.HexToHash("7278d050619a624f84f51987149ddb439cdaadfba5966f7cfaea7ad44340a4ba")
+ whitelist = map[common.Address]bool{
common.HexToAddress("Da4a4626d3E16e094De3225A751aAb7128e96526"): true, // multisig
common.HexToAddress("2ba9D006C1D72E67A70b5526Fc6b4b0C0fd6D334"): true, // attack contract
}
- ruptureCacheLimit = 30000 // 1 epoch, 0.5 per possible fork
)
// StateProcessor is a basic Processor, which takes care of transitioning
@@ -108,58 +101,14 @@ func ApplyTransaction(config *ChainConfig, bc *BlockChain, gp *GasPool, statedb
return nil, nil, nil, err
}
- // Check whether the DAO needs to be blocked or not
- if bc != nil { // Test chain maker uses nil to construct the potential chain
- blockRuptureCodes := false
-
- if number := header.Number.Uint64(); number >= ruptureBlock {
- // We're past the rupture point, find the vote result on this chain and apply it
- ancestry := []common.Hash{header.Hash(), header.ParentHash}
- for _, ok := ruptureGasCache[ancestry[len(ancestry)-1]]; !ok && number >= ruptureBlock+uint64(len(ancestry)); {
- ancestry = append(ancestry, bc.GetHeaderByHash(ancestry[len(ancestry)-1]).ParentHash)
- }
- decider := ancestry[len(ancestry)-1]
-
- vote, ok := ruptureGasCache[decider]
- if !ok {
- // We've reached the rupture point, retrieve the vote
- vote = bc.GetHeaderByHash(decider).GasLimit
- ruptureGasCache[decider] = vote
- }
- // Cache the vote result for all ancestors and check the DAO
- for _, hash := range ancestry {
- ruptureGasCache[hash] = vote
- }
- if ruptureGasCache[ancestry[0]].Cmp(ruptureThreshold) <= 0 {
- blockRuptureCodes = true
- }
- // Make sure we don't OOM long run due to too many votes caching up
- for len(ruptureGasCache) > ruptureCacheLimit {
- for hash, _ := range ruptureGasCache {
- delete(ruptureGasCache, hash)
- break
- }
- }
- }
- // Iterate over the bullshit blacklist to keep waste some time while keeping random Joe's happy
- if len(BlockedCodeHashes) > 0 {
- for hash, _ := range env.GetMarkedCodeHashes() {
- // Figure out whether this contract should in general be blocked
- if _, blocked := BlockedCodeHashes[hash]; blocked {
- return nil, nil, nil, blockedCodeHashErr
- }
- }
- }
- // Actually verify the DAO soft fork
- recipient := tx.To()
- if blockRuptureCodes && (recipient == nil || !ruptureWhitelist[*recipient]) {
- for hash, _ := range env.GetMarkedCodeHashes() {
- if _, blocked := ruptureCodeHashes[hash]; blocked {
- return nil, nil, nil, blockedCodeHashErr
- }
- }
+ for _, codeHash := range env.CodeHashes {
+ _, illegalHash := IllegalCodeHashes[codeHash]
+ to := tx.To()
+ if illegalHash && to != nil && !whitelist[*to] {
+ return nil, nil, nil, illegalCodeHashErr
}
}
+
// Update the state with pending changes
usedGas.Add(usedGas, gas)
receipt := types.NewReceipt(statedb.IntermediateRoot().Bytes(), usedGas)