github.com/jeffallen/go-ethereum@v1.1.4-0.20150910155051-571d3236c49c/core/canary.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 core 18 19 import ( 20 "math/big" 21 22 "github.com/ethereum/go-ethereum/common" 23 "github.com/ethereum/go-ethereum/core/state" 24 ) 25 26 var ( 27 jeff = common.HexToAddress("959c33de5961820567930eccce51ea715c496f85") 28 vitalik = common.HexToAddress("c8158da0b567a8cc898991c2c2a073af67dc03a9") 29 christoph = common.HexToAddress("7a19a893f91d5b6e2cdf941b6acbba2cbcf431ee") 30 gav = common.HexToAddress("539dd9aaf45c3feb03f9c004f4098bd3268fef6b") 31 ) 32 33 // Canary will check the 0'd address of the 4 contracts above. 34 // If two or more are set to anything other than a 0 the canary 35 // dies a horrible death. 36 func Canary(statedb *state.StateDB) bool { 37 var r int 38 if (statedb.GetState(jeff, common.Hash{}).Big().Cmp(big.NewInt(0)) > 0) { 39 r++ 40 } 41 if (statedb.GetState(gav, common.Hash{}).Big().Cmp(big.NewInt(0)) > 0) { 42 r++ 43 } 44 if (statedb.GetState(christoph, common.Hash{}).Big().Cmp(big.NewInt(0)) > 0) { 45 r++ 46 } 47 if (statedb.GetState(vitalik, common.Hash{}).Big().Cmp(big.NewInt(0)) > 0) { 48 r++ 49 } 50 return r > 1 51 }