mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-07-27 07:06:42 +00:00
add test cases
This commit is contained in:
parent
a0b925bfe3
commit
1e5211c1c7
4 changed files with 43 additions and 34 deletions
|
|
@ -96,16 +96,17 @@ var PrecompiledContractsBerlin = map[common.Address]PrecompiledContract{
|
||||||
// PrecompiledContractsCancun contains the default set of pre-compiled Ethereum
|
// PrecompiledContractsCancun contains the default set of pre-compiled Ethereum
|
||||||
// contracts used in the Cancun release.
|
// contracts used in the Cancun release.
|
||||||
var PrecompiledContractsCancun = map[common.Address]PrecompiledContract{
|
var PrecompiledContractsCancun = map[common.Address]PrecompiledContract{
|
||||||
common.BytesToAddress([]byte{1}): &ecrecover{},
|
common.BytesToAddress([]byte{1}): &ecrecover{},
|
||||||
common.BytesToAddress([]byte{2}): &sha256hash{},
|
common.BytesToAddress([]byte{2}): &sha256hash{},
|
||||||
common.BytesToAddress([]byte{3}): &ripemd160hash{},
|
common.BytesToAddress([]byte{3}): &ripemd160hash{},
|
||||||
common.BytesToAddress([]byte{4}): &dataCopy{},
|
common.BytesToAddress([]byte{4}): &dataCopy{},
|
||||||
common.BytesToAddress([]byte{5}): &bigModExp{eip2565: true},
|
common.BytesToAddress([]byte{5}): &bigModExp{eip2565: true},
|
||||||
common.BytesToAddress([]byte{6}): &bn256AddIstanbul{},
|
common.BytesToAddress([]byte{6}): &bn256AddIstanbul{},
|
||||||
common.BytesToAddress([]byte{7}): &bn256ScalarMulIstanbul{},
|
common.BytesToAddress([]byte{7}): &bn256ScalarMulIstanbul{},
|
||||||
common.BytesToAddress([]byte{8}): &bn256PairingIstanbul{},
|
common.BytesToAddress([]byte{8}): &bn256PairingIstanbul{},
|
||||||
common.BytesToAddress([]byte{9}): &blake2F{},
|
common.BytesToAddress([]byte{9}): &blake2F{},
|
||||||
common.BytesToAddress([]byte{0x0a}): &kzgPointEvaluation{},
|
common.BytesToAddress([]byte{0x0a}): &kzgPointEvaluation{},
|
||||||
|
common.BytesToAddress([]byte{0x01, 0x00}): &p256Verify{},
|
||||||
}
|
}
|
||||||
|
|
||||||
// PrecompiledContractsBLS contains the set of pre-compiled Ethereum
|
// PrecompiledContractsBLS contains the set of pre-compiled Ethereum
|
||||||
|
|
@ -122,14 +123,7 @@ var PrecompiledContractsBLS = map[common.Address]PrecompiledContract{
|
||||||
common.BytesToAddress([]byte{18}): &bls12381MapG2{},
|
common.BytesToAddress([]byte{18}): &bls12381MapG2{},
|
||||||
}
|
}
|
||||||
|
|
||||||
// PrecompiledContractsNapoli contains the precompiled Ethereum
|
|
||||||
// contract specified in EIP-7212. This is exported for testing purposes.
|
|
||||||
var PrecompiledContractsNapoli = map[common.Address]PrecompiledContract{
|
|
||||||
common.BytesToAddress([]byte{19}): &p256Verify{},
|
|
||||||
}
|
|
||||||
|
|
||||||
var (
|
var (
|
||||||
PrecompiledAddressesNapoli []common.Address
|
|
||||||
PrecompiledAddressesCancun []common.Address
|
PrecompiledAddressesCancun []common.Address
|
||||||
PrecompiledAddressesBerlin []common.Address
|
PrecompiledAddressesBerlin []common.Address
|
||||||
PrecompiledAddressesIstanbul []common.Address
|
PrecompiledAddressesIstanbul []common.Address
|
||||||
|
|
@ -156,17 +150,11 @@ func init() {
|
||||||
for k := range PrecompiledContractsCancun {
|
for k := range PrecompiledContractsCancun {
|
||||||
PrecompiledAddressesCancun = append(PrecompiledAddressesCancun, k)
|
PrecompiledAddressesCancun = append(PrecompiledAddressesCancun, k)
|
||||||
}
|
}
|
||||||
|
|
||||||
for k := range PrecompiledContractsNapoli {
|
|
||||||
PrecompiledAddressesNapoli = append(PrecompiledAddressesNapoli, k)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ActivePrecompiles returns the precompiles enabled with the current configuration.
|
// ActivePrecompiles returns the precompiles enabled with the current configuration.
|
||||||
func ActivePrecompiles(rules params.Rules) []common.Address {
|
func ActivePrecompiles(rules params.Rules) []common.Address {
|
||||||
switch {
|
switch {
|
||||||
case rules.IsNapoli:
|
|
||||||
return PrecompiledAddressesNapoli
|
|
||||||
case rules.IsCancun:
|
case rules.IsCancun:
|
||||||
return PrecompiledAddressesCancun
|
return PrecompiledAddressesCancun
|
||||||
case rules.IsBerlin:
|
case rules.IsBerlin:
|
||||||
|
|
|
||||||
|
|
@ -67,7 +67,7 @@ var allPrecompiles = map[common.Address]PrecompiledContract{
|
||||||
common.BytesToAddress([]byte{0x0f, 0x10}): &bls12381Pairing{},
|
common.BytesToAddress([]byte{0x0f, 0x10}): &bls12381Pairing{},
|
||||||
common.BytesToAddress([]byte{0x0f, 0x11}): &bls12381MapG1{},
|
common.BytesToAddress([]byte{0x0f, 0x11}): &bls12381MapG1{},
|
||||||
common.BytesToAddress([]byte{0x0f, 0x12}): &bls12381MapG2{},
|
common.BytesToAddress([]byte{0x0f, 0x12}): &bls12381MapG2{},
|
||||||
common.BytesToAddress([]byte{19}): &p256Verify{},
|
common.BytesToAddress([]byte{0x01, 0x00}): &p256Verify{},
|
||||||
}
|
}
|
||||||
|
|
||||||
// EIP-152 test vectors
|
// EIP-152 test vectors
|
||||||
|
|
@ -424,11 +424,11 @@ func BenchmarkPrecompiledP256Verify(bench *testing.B) {
|
||||||
Expected: "0000000000000000000000000000000000000000000000000000000000000001",
|
Expected: "0000000000000000000000000000000000000000000000000000000000000001",
|
||||||
Name: "p256Verify",
|
Name: "p256Verify",
|
||||||
}
|
}
|
||||||
benchmarkPrecompiled("13", t, bench)
|
benchmarkPrecompiled("100", t, bench)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestPrecompiledP256Verify(t *testing.T) {
|
func TestPrecompiledP256Verify(t *testing.T) {
|
||||||
t.Parallel()
|
t.Parallel()
|
||||||
|
|
||||||
testJson("p256Verify", "13", t)
|
testJson("p256Verify", "100", t)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
28
core/vm/testdata/precompiles/p256Verify.json
vendored
28
core/vm/testdata/precompiles/p256Verify.json
vendored
|
|
@ -5,5 +5,33 @@
|
||||||
"Gas": 3450,
|
"Gas": 3450,
|
||||||
"Name": "CallP256Verify",
|
"Name": "CallP256Verify",
|
||||||
"NoBenchmark": false
|
"NoBenchmark": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Input": "b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9414de3726ee4d237b410c1d85ebcb05553dc578561d9f7942b7250795beb9b9027b657067322fc00ab35263fde0acabf998cd9fcf1282df9555f85dba7bdbbe2dc90f74c9e210bc3e0c60aeaa03729c9e6acde4a048ee58fd2e466c1e7b0374e606b8c22ad2985df7d792ff344f03ce94a079da801006b13640bc5af7932a7b9",
|
||||||
|
"Expected": "0000000000000000000000000000000000000000000000000000000000000001",
|
||||||
|
"Gas": 3450,
|
||||||
|
"Name": "CallP256Verify",
|
||||||
|
"NoBenchmark": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Input": "b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9b35d6a4f7f6fc5620c97d4287696f5174b3d37fa537b74b5fc26997ba79c725d62fe5e5fe6da76eec924e822c5ef853ede6c17069a9e9133a38f87d61599f68e7d5f3c812a255436846ee84a262b79ec4d0783afccf2433deabdca9ecf62bef5ff24e90988c7f139d378549c3a8bc6c94e6a1c911c1e02e6f48ed65aaf3d296e",
|
||||||
|
"Expected": "0000000000000000000000000000000000000000000000000000000000000001",
|
||||||
|
"Gas": 3450,
|
||||||
|
"Name": "CallP256Verify",
|
||||||
|
"NoBenchmark": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Input": "b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9c29c3df6ce3431b6f030b1b68b1589508ad9d1a149830489c638653aa4b08af93f6e86a9a7643403b6f5c593410d9f7234a8cd27309bce90447073ce17476850615ff147863bc8652be1e369444f90bbc5f9df05a26362e609f73ab1f1839fe3cd34fd2ae672c110671d49115825fc56b5148321aabe5ba39f2b46f71149cff9",
|
||||||
|
"Expected": "",
|
||||||
|
"Gas": 3450,
|
||||||
|
"Name": "CallP256Verify",
|
||||||
|
"NoBenchmark": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Input": "b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9",
|
||||||
|
"Expected": "",
|
||||||
|
"Gas": 3450,
|
||||||
|
"Name": "CallP256Verify",
|
||||||
|
"NoBenchmark": false
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
@ -518,7 +518,6 @@ type ChainConfig struct {
|
||||||
CancunBlock *big.Int `json:"cancunBlock,omitempty"` // Cancun switch Block (nil = no fork, 0 = already on cancun)
|
CancunBlock *big.Int `json:"cancunBlock,omitempty"` // Cancun switch Block (nil = no fork, 0 = already on cancun)
|
||||||
PragueBlock *big.Int `json:"pragueBlock,omitempty"` // Prague switch Block (nil = no fork, 0 = already on prague)
|
PragueBlock *big.Int `json:"pragueBlock,omitempty"` // Prague switch Block (nil = no fork, 0 = already on prague)
|
||||||
VerkleBlock *big.Int `json:"verkleBlock,omitempty"` // Verkle switch Block (nil = no fork, 0 = already on verkle)
|
VerkleBlock *big.Int `json:"verkleBlock,omitempty"` // Verkle switch Block (nil = no fork, 0 = already on verkle)
|
||||||
NapoliBlock *big.Int `json:"napoliBlock,omitempty"` // Napoli switch Block (nil = no fork, 0 = already on Napoli)
|
|
||||||
|
|
||||||
// TerminalTotalDifficulty is the amount of total difficulty reached by
|
// TerminalTotalDifficulty is the amount of total difficulty reached by
|
||||||
// the network that triggers the consensus upgrade.
|
// the network that triggers the consensus upgrade.
|
||||||
|
|
@ -858,11 +857,6 @@ func (c *ChainConfig) IsPrague(num *big.Int) bool {
|
||||||
return isBlockForked(c.PragueBlock, num)
|
return isBlockForked(c.PragueBlock, num)
|
||||||
}
|
}
|
||||||
|
|
||||||
// IsNapoli returns whether num is either equal to the Napoli fork block or greater.
|
|
||||||
func (c *ChainConfig) IsNapoli(num *big.Int) bool {
|
|
||||||
return isBlockForked(c.NapoliBlock, num)
|
|
||||||
}
|
|
||||||
|
|
||||||
// CheckCompatible checks whether scheduled fork transitions have been imported
|
// CheckCompatible checks whether scheduled fork transitions have been imported
|
||||||
// with a mismatching chain configuration.
|
// with a mismatching chain configuration.
|
||||||
func (c *ChainConfig) CheckCompatible(newcfg *ChainConfig, height uint64, time uint64) *ConfigCompatError {
|
func (c *ChainConfig) CheckCompatible(newcfg *ChainConfig, height uint64, time uint64) *ConfigCompatError {
|
||||||
|
|
@ -1151,7 +1145,7 @@ type Rules struct {
|
||||||
IsByzantium, IsConstantinople, IsPetersburg, IsIstanbul bool
|
IsByzantium, IsConstantinople, IsPetersburg, IsIstanbul bool
|
||||||
IsBerlin, IsLondon bool
|
IsBerlin, IsLondon bool
|
||||||
IsMerge, IsShanghai, IsCancun, IsPrague bool
|
IsMerge, IsShanghai, IsCancun, IsPrague bool
|
||||||
IsVerkle, IsNapoli bool
|
IsVerkle bool
|
||||||
}
|
}
|
||||||
|
|
||||||
// Rules ensures c's ChainID is not nil.
|
// Rules ensures c's ChainID is not nil.
|
||||||
|
|
@ -1177,6 +1171,5 @@ func (c *ChainConfig) Rules(num *big.Int, isMerge bool, timestamp uint64) Rules
|
||||||
IsShanghai: c.IsShanghai(num),
|
IsShanghai: c.IsShanghai(num),
|
||||||
IsCancun: c.IsCancun(num),
|
IsCancun: c.IsCancun(num),
|
||||||
IsPrague: c.IsPrague(num),
|
IsPrague: c.IsPrague(num),
|
||||||
IsNapoli: c.IsNapoli(num),
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue