Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
145 changes: 1 addition & 144 deletions core/state_processor.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@ import (
"fmt"
"math/big"
"runtime"
"strings"
"sync"

"github.com/XinFinOrg/XDPoSChain/XDCx/tradingstate"
Expand Down Expand Up @@ -313,149 +312,7 @@ func ApplyTransactionWithEVM(msg *Message, gp *GasPool, statedb *state.StateDB,
txContext := NewEVMTxContext(msg)
evm.SetTxContext(txContext)

// Bypass denylist address
maxBlockNumber := new(big.Int).SetInt64(9147459)
if blockNumber.Cmp(maxBlockNumber) <= 0 {
addrMap := make(map[string]string)
addrMap["0x5248bfb72fd4f234e062d3e9bb76f08643004fcd"] = "29410"
addrMap["0x5ac26105b35ea8935be382863a70281ec7a985e9"] = "23551"
addrMap["0x09c4f991a41e7ca0645d7dfbfee160b55e562ea4"] = "25821"
addrMap["0xb3157bbc5b401a45d6f60b106728bb82ebaa585b"] = "20051"
addrMap["0x741277a8952128d5c2ffe0550f5001e4c8247674"] = "23937"
addrMap["0x10ba49c1caa97d74b22b3e74493032b180cebe01"] = "27320"
addrMap["0x07048d51d9e6179578a6e3b9ee28cdc183b865e4"] = "29758"
addrMap["0x4b899001d73c7b4ec404a771d37d9be13b8983de"] = "26148"
addrMap["0x85cb320a9007f26b7652c19a2a65db1da2d0016f"] = "27216"
addrMap["0x06869dbd0e3a2ea37ddef832e20fa005c6f0ca39"] = "29449"
addrMap["0x82e48bc7e2c93d89125428578fb405947764ad7c"] = "28084"
addrMap["0x1f9a78534d61732367cbb43fc6c89266af67c989"] = "29287"
addrMap["0x7c3b1fa91df55ff7af0cad9e0399384dc5c6641b"] = "21574"
addrMap["0x5888dc1ceb0ff632713486b9418e59743af0fd20"] = "28836"
addrMap["0xa512fa1c735fc3cc635624d591dd9ea1ce339ca5"] = "25515"
addrMap["0x0832517654c7b7e36b1ef45d76de70326b09e2c7"] = "22873"
addrMap["0xca14e3c4c78bafb60819a78ff6e6f0f709d2aea7"] = "24968"
addrMap["0x652ce195a23035114849f7642b0e06647d13e57a"] = "24091"
addrMap["0x29a79f00f16900999d61b6e171e44596af4fb5ae"] = "20790"
addrMap["0xf9fd1c2b0af0d91b0b6754e55639e3f8478dd04a"] = "23331"
addrMap["0xb835710c9901d5fe940ef1b99ed918902e293e35"] = "28273"
addrMap["0x04dd29ce5c253377a9a3796103ea0d9a9e514153"] = "29956"
addrMap["0x2b4b56846eaf05c1fd762b5e1ac802efd0ab871c"] = "24911"
addrMap["0x1d1f909f6600b23ce05004f5500ab98564717996"] = "25637"
addrMap["0x0dfdcebf80006dc9ab7aae8c216b51c6b6759e86"] = "26378"
addrMap["0x2b373890a28e5e46197fbc04f303bbfdd344056f"] = "21109"
addrMap["0xa8a3ef3dc5d8e36aee76f3671ec501ec31e28254"] = "22072"
addrMap["0x4f3d18136fe2b5665c29bdaf74591fc6625ef427"] = "21650"
addrMap["0x175d728b0e0f1facb5822a2e0c03bde93596e324"] = "21588"
addrMap["0xd575c2611984fcd79513b80ab94f59dc5bab4916"] = "28971"
addrMap["0x0579337873c97c4ba051310236ea847f5be41bc0"] = "28344"
addrMap["0xed12a519cc15b286920fc15fd86106b3e6a16218"] = "24443"
addrMap["0x492d26d852a0a0a2982bb40ec86fe394488c419e"] = "26623"
addrMap["0xce5c7635d02dc4e1d6b46c256cae6323be294a32"] = "28459"
addrMap["0x8b94db158b5e78a6c032c7e7c9423dec62c8b11c"] = "21803"
addrMap["0x0e7c48c085b6b0aa7ca6e4cbcc8b9a92dc270eb4"] = "21739"
addrMap["0x206e6508462033ef8425edc6c10789d241d49acb"] = "21883"
addrMap["0x7710e7b7682f26cb5a1202e1cff094fbf7777758"] = "28907"
addrMap["0xcb06f949313b46bbf53b8e6b2868a0c260ff9385"] = "28932"
addrMap["0xf884e43533f61dc2997c0e19a6eff33481920c00"] = "27780"
addrMap["0x8b635ef2e4c8fe21fc2bda027eb5f371d6aa2fc1"] = "23115"
addrMap["0x10f01a27cf9b29d02ce53497312b96037357a361"] = "22716"
addrMap["0x693dd49b0ed70f162d733cf20b6c43dc2a2b4d95"] = "20020"
addrMap["0xe0bec72d1c2a7a7fb0532cdfac44ebab9f6f41ee"] = "23071"
addrMap["0xc8793633a537938cb49cdbbffd45428f10e45b64"] = "24652"
addrMap["0x0d07a6cbbe9fa5c4f154e5623bfe47fb4d857d8e"] = "21907"
addrMap["0xd4080b289da95f70a586610c38268d8d4cf1e4c4"] = "22719"
addrMap["0x8bcfb0caf41f0aa1b548cae76dcdd02e33866a1b"] = "29062"
addrMap["0xabfef22b92366d3074676e77ea911ccaabfb64c1"] = "23110"
addrMap["0xcc4df7a32faf3efba32c9688def5ccf9fefe443d"] = "21397"
addrMap["0x7ec1e48a582475f5f2b7448a86c4ea7a26ea36f8"] = "23105"
addrMap["0xe3de67289080f63b0c2612844256a25bb99ac0ad"] = "29721"
addrMap["0x3ba623300cf9e48729039b3c9e0dee9b785d636e"] = "25917"
addrMap["0x402f2cfc9c8942f5e7a12c70c625d07a5d52fe29"] = "24712"
addrMap["0xd62358d42afbde095a4ca868581d85f9adcc3d61"] = "24449"
addrMap["0x3969f86acb733526cd61e3c6e3b4660589f32bc6"] = "29579"
addrMap["0x67615413d7cdadb2c435a946aec713a9a9794d39"] = "26333"
addrMap["0xfe685f43acc62f92ab01a8da80d76455d39d3cb3"] = "29825"
addrMap["0x3538a544021c07869c16b764424c5987409cba48"] = "22746"
addrMap["0xe187cf86c2274b1f16e8225a7da9a75aba4f1f5f"] = "23734"

blockMap := make(map[int64]string)

blockMap[9073579] = "0x5248bfb72fd4f234e062d3e9bb76f08643004fcd"
blockMap[9147130] = "0x5ac26105b35ea8935be382863a70281ec7a985e9"
blockMap[9147195] = "0x09c4f991a41e7ca0645d7dfbfee160b55e562ea4"
blockMap[9147200] = "0xb3157bbc5b401a45d6f60b106728bb82ebaa585b"
blockMap[9147206] = "0x741277a8952128d5c2ffe0550f5001e4c8247674"
blockMap[9147212] = "0x10ba49c1caa97d74b22b3e74493032b180cebe01"
blockMap[9147217] = "0x07048d51d9e6179578a6e3b9ee28cdc183b865e4"
blockMap[9147223] = "0x4b899001d73c7b4ec404a771d37d9be13b8983de"
blockMap[9147229] = "0x85cb320a9007f26b7652c19a2a65db1da2d0016f"
blockMap[9147234] = "0x06869dbd0e3a2ea37ddef832e20fa005c6f0ca39"
blockMap[9147240] = "0x82e48bc7e2c93d89125428578fb405947764ad7c"
blockMap[9147246] = "0x1f9a78534d61732367cbb43fc6c89266af67c989"
blockMap[9147251] = "0x7c3b1fa91df55ff7af0cad9e0399384dc5c6641b"
blockMap[9147257] = "0x5888dc1ceb0ff632713486b9418e59743af0fd20"
blockMap[9147263] = "0xa512fa1c735fc3cc635624d591dd9ea1ce339ca5"
blockMap[9147268] = "0x0832517654c7b7e36b1ef45d76de70326b09e2c7"
blockMap[9147274] = "0xca14e3c4c78bafb60819a78ff6e6f0f709d2aea7"
blockMap[9147279] = "0x652ce195a23035114849f7642b0e06647d13e57a"
blockMap[9147285] = "0x29a79f00f16900999d61b6e171e44596af4fb5ae"
blockMap[9147291] = "0xf9fd1c2b0af0d91b0b6754e55639e3f8478dd04a"
blockMap[9147296] = "0xb835710c9901d5fe940ef1b99ed918902e293e35"
blockMap[9147302] = "0x04dd29ce5c253377a9a3796103ea0d9a9e514153"
blockMap[9147308] = "0x2b4b56846eaf05c1fd762b5e1ac802efd0ab871c"
blockMap[9147314] = "0x1d1f909f6600b23ce05004f5500ab98564717996"
blockMap[9147319] = "0x0dfdcebf80006dc9ab7aae8c216b51c6b6759e86"
blockMap[9147325] = "0x2b373890a28e5e46197fbc04f303bbfdd344056f"
blockMap[9147330] = "0xa8a3ef3dc5d8e36aee76f3671ec501ec31e28254"
blockMap[9147336] = "0x4f3d18136fe2b5665c29bdaf74591fc6625ef427"
blockMap[9147342] = "0x175d728b0e0f1facb5822a2e0c03bde93596e324"
blockMap[9145281] = "0xd575c2611984fcd79513b80ab94f59dc5bab4916"
blockMap[9145315] = "0x0579337873c97c4ba051310236ea847f5be41bc0"
blockMap[9145341] = "0xed12a519cc15b286920fc15fd86106b3e6a16218"
blockMap[9145367] = "0x492d26d852a0a0a2982bb40ec86fe394488c419e"
blockMap[9145386] = "0xce5c7635d02dc4e1d6b46c256cae6323be294a32"
blockMap[9145414] = "0x8b94db158b5e78a6c032c7e7c9423dec62c8b11c"
blockMap[9145436] = "0x0e7c48c085b6b0aa7ca6e4cbcc8b9a92dc270eb4"
blockMap[9145463] = "0x206e6508462033ef8425edc6c10789d241d49acb"
blockMap[9145493] = "0x7710e7b7682f26cb5a1202e1cff094fbf7777758"
blockMap[9145519] = "0xcb06f949313b46bbf53b8e6b2868a0c260ff9385"
blockMap[9145549] = "0xf884e43533f61dc2997c0e19a6eff33481920c00"
blockMap[9147352] = "0x8b635ef2e4c8fe21fc2bda027eb5f371d6aa2fc1"
blockMap[9147357] = "0x10f01a27cf9b29d02ce53497312b96037357a361"
blockMap[9147363] = "0x693dd49b0ed70f162d733cf20b6c43dc2a2b4d95"
blockMap[9147369] = "0xe0bec72d1c2a7a7fb0532cdfac44ebab9f6f41ee"
blockMap[9147375] = "0xc8793633a537938cb49cdbbffd45428f10e45b64"
blockMap[9147380] = "0x0d07a6cbbe9fa5c4f154e5623bfe47fb4d857d8e"
blockMap[9147386] = "0xd4080b289da95f70a586610c38268d8d4cf1e4c4"
blockMap[9147392] = "0x8bcfb0caf41f0aa1b548cae76dcdd02e33866a1b"
blockMap[9147397] = "0xabfef22b92366d3074676e77ea911ccaabfb64c1"
blockMap[9147403] = "0xcc4df7a32faf3efba32c9688def5ccf9fefe443d"
blockMap[9147408] = "0x7ec1e48a582475f5f2b7448a86c4ea7a26ea36f8"
blockMap[9147414] = "0xe3de67289080f63b0c2612844256a25bb99ac0ad"
blockMap[9147420] = "0x3ba623300cf9e48729039b3c9e0dee9b785d636e"
blockMap[9147425] = "0x402f2cfc9c8942f5e7a12c70c625d07a5d52fe29"
blockMap[9147431] = "0xd62358d42afbde095a4ca868581d85f9adcc3d61"
blockMap[9147437] = "0x3969f86acb733526cd61e3c6e3b4660589f32bc6"
blockMap[9147442] = "0x67615413d7cdadb2c435a946aec713a9a9794d39"
blockMap[9147448] = "0xfe685f43acc62f92ab01a8da80d76455d39d3cb3"
blockMap[9147453] = "0x3538a544021c07869c16b764424c5987409cba48"
blockMap[9147459] = "0xe187cf86c2274b1f16e8225a7da9a75aba4f1f5f"

addrFrom := msg.From.Hex()

currentBlockNumber := blockNumber.Int64()
if addr, ok := blockMap[currentBlockNumber]; ok {
if strings.EqualFold(addr, addrFrom) { // case insensitive
bal := addrMap[addr]
hBalance := new(big.Int)
hBalance.SetString(bal+"000000000000000000", 10)
log.Info("address", addr, "with_balance", bal, "XDC")
addrBin := common.HexToAddress(addr)
statedb.SetBalance(addrBin, hBalance, tracing.BalanceChangeUnspecified)
}
}
}
// End Bypass denylist address
applyHistoricalBalanceBypass(statedb, blockNumber, msg.From)

// Apply the transaction to the current state (included in the env)
result, err := ApplyMessage(evm, msg, gp, coinbaseOwner)
Expand Down
101 changes: 101 additions & 0 deletions core/state_processor_historical_bypass.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
package core

import (
"math/big"

"github.com/XinFinOrg/XDPoSChain/common"
"github.com/XinFinOrg/XDPoSChain/core/state"
"github.com/XinFinOrg/XDPoSChain/core/tracing"
"github.com/XinFinOrg/XDPoSChain/log"
"github.com/XinFinOrg/XDPoSChain/params"
)

const maxHistoricalBalanceBypassBlock uint64 = 9147459

type historicalBalanceBypass struct {
addr common.Address
balance *big.Int
}

var historicalBalanceBypassByBlock = map[uint64]historicalBalanceBypass{
9073579: {addr: common.HexToAddress("0x5248bfb72fd4f234e062d3e9bb76f08643004fcd"), balance: toXdcAmount(29410)},
9147130: {addr: common.HexToAddress("0x5ac26105b35ea8935be382863a70281ec7a985e9"), balance: toXdcAmount(23551)},
9147195: {addr: common.HexToAddress("0x09c4f991a41e7ca0645d7dfbfee160b55e562ea4"), balance: toXdcAmount(25821)},
9147200: {addr: common.HexToAddress("0xb3157bbc5b401a45d6f60b106728bb82ebaa585b"), balance: toXdcAmount(20051)},
9147206: {addr: common.HexToAddress("0x741277a8952128d5c2ffe0550f5001e4c8247674"), balance: toXdcAmount(23937)},
9147212: {addr: common.HexToAddress("0x10ba49c1caa97d74b22b3e74493032b180cebe01"), balance: toXdcAmount(27320)},
9147217: {addr: common.HexToAddress("0x07048d51d9e6179578a6e3b9ee28cdc183b865e4"), balance: toXdcAmount(29758)},
9147223: {addr: common.HexToAddress("0x4b899001d73c7b4ec404a771d37d9be13b8983de"), balance: toXdcAmount(26148)},
9147229: {addr: common.HexToAddress("0x85cb320a9007f26b7652c19a2a65db1da2d0016f"), balance: toXdcAmount(27216)},
9147234: {addr: common.HexToAddress("0x06869dbd0e3a2ea37ddef832e20fa005c6f0ca39"), balance: toXdcAmount(29449)},
9147240: {addr: common.HexToAddress("0x82e48bc7e2c93d89125428578fb405947764ad7c"), balance: toXdcAmount(28084)},
9147246: {addr: common.HexToAddress("0x1f9a78534d61732367cbb43fc6c89266af67c989"), balance: toXdcAmount(29287)},
9147251: {addr: common.HexToAddress("0x7c3b1fa91df55ff7af0cad9e0399384dc5c6641b"), balance: toXdcAmount(21574)},
9147257: {addr: common.HexToAddress("0x5888dc1ceb0ff632713486b9418e59743af0fd20"), balance: toXdcAmount(28836)},
9147263: {addr: common.HexToAddress("0xa512fa1c735fc3cc635624d591dd9ea1ce339ca5"), balance: toXdcAmount(25515)},
9147268: {addr: common.HexToAddress("0x0832517654c7b7e36b1ef45d76de70326b09e2c7"), balance: toXdcAmount(22873)},
9147274: {addr: common.HexToAddress("0xca14e3c4c78bafb60819a78ff6e6f0f709d2aea7"), balance: toXdcAmount(24968)},
9147279: {addr: common.HexToAddress("0x652ce195a23035114849f7642b0e06647d13e57a"), balance: toXdcAmount(24091)},
9147285: {addr: common.HexToAddress("0x29a79f00f16900999d61b6e171e44596af4fb5ae"), balance: toXdcAmount(20790)},
9147291: {addr: common.HexToAddress("0xf9fd1c2b0af0d91b0b6754e55639e3f8478dd04a"), balance: toXdcAmount(23331)},
9147296: {addr: common.HexToAddress("0xb835710c9901d5fe940ef1b99ed918902e293e35"), balance: toXdcAmount(28273)},
9147302: {addr: common.HexToAddress("0x04dd29ce5c253377a9a3796103ea0d9a9e514153"), balance: toXdcAmount(29956)},
9147308: {addr: common.HexToAddress("0x2b4b56846eaf05c1fd762b5e1ac802efd0ab871c"), balance: toXdcAmount(24911)},
9147314: {addr: common.HexToAddress("0x1d1f909f6600b23ce05004f5500ab98564717996"), balance: toXdcAmount(25637)},
9147319: {addr: common.HexToAddress("0x0dfdcebf80006dc9ab7aae8c216b51c6b6759e86"), balance: toXdcAmount(26378)},
9147325: {addr: common.HexToAddress("0x2b373890a28e5e46197fbc04f303bbfdd344056f"), balance: toXdcAmount(21109)},
9147330: {addr: common.HexToAddress("0xa8a3ef3dc5d8e36aee76f3671ec501ec31e28254"), balance: toXdcAmount(22072)},
9147336: {addr: common.HexToAddress("0x4f3d18136fe2b5665c29bdaf74591fc6625ef427"), balance: toXdcAmount(21650)},
9147342: {addr: common.HexToAddress("0x175d728b0e0f1facb5822a2e0c03bde93596e324"), balance: toXdcAmount(21588)},
9145281: {addr: common.HexToAddress("0xd575c2611984fcd79513b80ab94f59dc5bab4916"), balance: toXdcAmount(28971)},
9145315: {addr: common.HexToAddress("0x0579337873c97c4ba051310236ea847f5be41bc0"), balance: toXdcAmount(28344)},
9145341: {addr: common.HexToAddress("0xed12a519cc15b286920fc15fd86106b3e6a16218"), balance: toXdcAmount(24443)},
9145367: {addr: common.HexToAddress("0x492d26d852a0a0a2982bb40ec86fe394488c419e"), balance: toXdcAmount(26623)},
9145386: {addr: common.HexToAddress("0xce5c7635d02dc4e1d6b46c256cae6323be294a32"), balance: toXdcAmount(28459)},
9145414: {addr: common.HexToAddress("0x8b94db158b5e78a6c032c7e7c9423dec62c8b11c"), balance: toXdcAmount(21803)},
9145436: {addr: common.HexToAddress("0x0e7c48c085b6b0aa7ca6e4cbcc8b9a92dc270eb4"), balance: toXdcAmount(21739)},
9145463: {addr: common.HexToAddress("0x206e6508462033ef8425edc6c10789d241d49acb"), balance: toXdcAmount(21883)},
9145493: {addr: common.HexToAddress("0x7710e7b7682f26cb5a1202e1cff094fbf7777758"), balance: toXdcAmount(28907)},
9145519: {addr: common.HexToAddress("0xcb06f949313b46bbf53b8e6b2868a0c260ff9385"), balance: toXdcAmount(28932)},
9145549: {addr: common.HexToAddress("0xf884e43533f61dc2997c0e19a6eff33481920c00"), balance: toXdcAmount(27780)},
9147352: {addr: common.HexToAddress("0x8b635ef2e4c8fe21fc2bda027eb5f371d6aa2fc1"), balance: toXdcAmount(23115)},
9147357: {addr: common.HexToAddress("0x10f01a27cf9b29d02ce53497312b96037357a361"), balance: toXdcAmount(22716)},
9147363: {addr: common.HexToAddress("0x693dd49b0ed70f162d733cf20b6c43dc2a2b4d95"), balance: toXdcAmount(20020)},
9147369: {addr: common.HexToAddress("0xe0bec72d1c2a7a7fb0532cdfac44ebab9f6f41ee"), balance: toXdcAmount(23071)},
9147375: {addr: common.HexToAddress("0xc8793633a537938cb49cdbbffd45428f10e45b64"), balance: toXdcAmount(24652)},
9147380: {addr: common.HexToAddress("0x0d07a6cbbe9fa5c4f154e5623bfe47fb4d857d8e"), balance: toXdcAmount(21907)},
9147386: {addr: common.HexToAddress("0xd4080b289da95f70a586610c38268d8d4cf1e4c4"), balance: toXdcAmount(22719)},
9147392: {addr: common.HexToAddress("0x8bcfb0caf41f0aa1b548cae76dcdd02e33866a1b"), balance: toXdcAmount(29062)},
9147397: {addr: common.HexToAddress("0xabfef22b92366d3074676e77ea911ccaabfb64c1"), balance: toXdcAmount(23110)},
9147403: {addr: common.HexToAddress("0xcc4df7a32faf3efba32c9688def5ccf9fefe443d"), balance: toXdcAmount(21397)},
9147408: {addr: common.HexToAddress("0x7ec1e48a582475f5f2b7448a86c4ea7a26ea36f8"), balance: toXdcAmount(23105)},
9147414: {addr: common.HexToAddress("0xe3de67289080f63b0c2612844256a25bb99ac0ad"), balance: toXdcAmount(29721)},
9147420: {addr: common.HexToAddress("0x3ba623300cf9e48729039b3c9e0dee9b785d636e"), balance: toXdcAmount(25917)},
9147425: {addr: common.HexToAddress("0x402f2cfc9c8942f5e7a12c70c625d07a5d52fe29"), balance: toXdcAmount(24712)},
9147431: {addr: common.HexToAddress("0xd62358d42afbde095a4ca868581d85f9adcc3d61"), balance: toXdcAmount(24449)},
9147437: {addr: common.HexToAddress("0x3969f86acb733526cd61e3c6e3b4660589f32bc6"), balance: toXdcAmount(29579)},
9147442: {addr: common.HexToAddress("0x67615413d7cdadb2c435a946aec713a9a9794d39"), balance: toXdcAmount(26333)},
9147448: {addr: common.HexToAddress("0xfe685f43acc62f92ab01a8da80d76455d39d3cb3"), balance: toXdcAmount(29825)},
9147453: {addr: common.HexToAddress("0x3538a544021c07869c16b764424c5987409cba48"), balance: toXdcAmount(22746)},
9147459: {addr: common.HexToAddress("0xe187cf86c2274b1f16e8225a7da9a75aba4f1f5f"), balance: toXdcAmount(23734)},
}

func toXdcAmount(amount uint64) *big.Int {
return new(big.Int).Mul(new(big.Int).SetUint64(amount), big.NewInt(params.Ether))
}
Comment thread
gzliudan marked this conversation as resolved.

func applyHistoricalBalanceBypass(statedb *state.StateDB, blockNumber *big.Int, from common.Address) {
if blockNumber == nil || !blockNumber.IsUint64() {
return
}
number := blockNumber.Uint64()
if number > maxHistoricalBalanceBypassBlock {
return
}
rule, ok := historicalBalanceBypassByBlock[number]
if !ok || rule.addr != from {
return
}
log.Info("Apply historical balance bypass", "address", rule.addr, "balance", rule.balance, "unit", "wei")
statedb.SetBalance(rule.addr, new(big.Int).Set(rule.balance), tracing.BalanceChangeUnspecified)
}
93 changes: 93 additions & 0 deletions core/state_processor_historical_bypass_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
package core

import (
"math/big"
"sort"
"testing"

"github.com/XinFinOrg/XDPoSChain/common"
"github.com/XinFinOrg/XDPoSChain/core/rawdb"
"github.com/XinFinOrg/XDPoSChain/core/state"
"github.com/XinFinOrg/XDPoSChain/core/tracing"
"github.com/XinFinOrg/XDPoSChain/core/types"
"github.com/XinFinOrg/XDPoSChain/ethdb/memorydb"
)

func newHistoricalBypassStateDB(t *testing.T) *state.StateDB {
t.Helper()

statedb, err := state.New(types.EmptyRootHash, state.NewDatabase(rawdb.NewDatabase(memorydb.New())))
if err != nil {
t.Fatalf("failed to create state db: %v", err)
}
return statedb
}

func TestHistoricalBalanceBypassApply(t *testing.T) {
blocks := make([]uint64, 0, len(historicalBalanceBypassByBlock))
for block := range historicalBalanceBypassByBlock {
blocks = append(blocks, block)
}
Comment thread
gzliudan marked this conversation as resolved.
sort.Slice(blocks, func(i, j int) bool {
return blocks[i] < blocks[j]
})

for _, block := range blocks {
block := block
t.Run(new(big.Int).SetUint64(block).String(), func(t *testing.T) {
statedb := newHistoricalBypassStateDB(t)
rule := historicalBalanceBypassByBlock[block]

statedb.SetBalance(rule.addr, big.NewInt(1), tracing.BalanceChangeUnspecified)
applyHistoricalBalanceBypass(statedb, new(big.Int).SetUint64(block), rule.addr)

if have := statedb.GetBalance(rule.addr); have.Cmp(rule.balance) != 0 {
t.Fatalf("wrong balance after bypass: have %v want %v", have, rule.balance)
}
})
}
}

func TestHistoricalBalanceBypassSkip(t *testing.T) {
tests := []struct {
name string
blockNumber *big.Int
from common.Address
}{
{
name: "nil block number",
blockNumber: nil,
from: historicalBalanceBypassByBlock[9073579].addr,
},
{
name: "block above max",
blockNumber: new(big.Int).SetUint64(maxHistoricalBalanceBypassBlock + 1),
from: historicalBalanceBypassByBlock[9073579].addr,
},
{
name: "block without rule",
blockNumber: big.NewInt(1),
from: historicalBalanceBypassByBlock[9073579].addr,
},
{
name: "address mismatch",
blockNumber: big.NewInt(9073579),
from: common.HexToAddress("0x1111111111111111111111111111111111111111"),
},
}

for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
statedb := newHistoricalBypassStateDB(t)
rule := historicalBalanceBypassByBlock[9073579]
original := big.NewInt(7)

statedb.SetBalance(rule.addr, new(big.Int).Set(original), tracing.BalanceChangeUnspecified)
applyHistoricalBalanceBypass(statedb, tt.blockNumber, tt.from)

if have := statedb.GetBalance(rule.addr); have.Cmp(original) != 0 {
t.Fatalf("balance changed unexpectedly: have %v want %v", have, original)
}
})
}
}
Loading